2013-11-08 2 views
1

Я новичок в WPF, который может объяснить трудность, с которой я это делаю. В качестве примера того, что я хочу сделать, я использую упрощенную версию примера примера Xceed's MasterDetial, в которой Employees как Мастер и Заказы, связанные с каждым сотрудником как Детали. Функции DetailConfigurations работают. Я использую этот пример, потому что мне нужно, чтобы те же функции работали в гораздо большем и сложном приложении.Xceed WPF DataGrid - Мастер/Деталь: изменение цвета фона ячейки в деталях на основе данных

Где я столкнулся с проблемой пытается изменить цвет фона одного DataCell в разделе подробно. В качестве примера, скажем, я расширил первую строку мастера (сотрудника) и вернул список заказов. Каждый заказ имеет поле ShipCountry. Если значение ShipCountry - «Польша», я хочу изменить фон ячейки ShipCountry (и ТОЛЬКО этой ячейки) на красный.

Нижеследующее делает это для всей строки, несмотря на то, что существует целевой тип DataCell. Я не могу понять, почему это так. Я пробовал любое количество различных подходов на основе тех вещей, которые я нашел в поиске этой проблемы, но никто не работал. Я полагаю, что я пропустил что-то очевидное, и это простая проблема с привязкой, но это то, что новичок в WPF (и в сетке Xceed) мешает мне.

Любая помощь была бы принята с благодарностью!

<xcdg:DataGridControl 
    x:Name="grid" 
    AllowDetailToggle="{Binding Source={x:Static local:MainPageParams.Singleton},Path=AllowDetailToggle}" 
    AutoCreateDetailConfigurations="False" 
    CellEditorDisplayConditions="None" 
    EditTriggers="BeginEditCommand,ActivationGesture,ClickOnCurrentCell" 
    ItemScrollingBehavior="Immediate" 
    ItemsSource="{Binding Source={StaticResource cvsEmployees}}"> 
     <xcdg:DataGridControl.Resources> 
      <Style TargetType="{x:Type xcdg:DataCell}"> 
       <Style.Triggers> 

        <!-- Fieldname not a valid property... 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=ShipCountry}" Value="Poland"/> 
          <Condition Binding="{Binding Self, Path=FieldName}" Value="ShipCountry"/> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Background" Value="Red"/> 
        </MultiDataTrigger> 
        --> 

        <!-- This changes the entire row to Red, not just the ShipCountry field--> 
        <DataTrigger Binding="{Binding Path=ShipCountry}" Value="Poland"> 
         <Setter Property="Background" Value="Red"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </xcdg:DataGridControl.Resources> 
     <xcdg:DataGridControl.View> 

...

ответ

1

Я думаю, что вопрос с первым примером является:

Binding="{Binding Self, Path=FieldName}" 

Это то, что я делаю на шахте. Я просто поменялся вашими параметрами.

<MultiDataTrigger> 
    <MultiDataTrigger.Conditions> 
     <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=FieldName}" Value="ShipCountry" /> 
     <Condition Binding="{Binding ShipCountry}" Value="Poland" /> 
    </MultiDataTrigger.Conditions> 
    <Setter Property="Background" Value="Red" /> 
</MultiDataTrigger> 

Или другой способ, которым я делаю это в DataTemplate колонны:

Колонка декларации:

<xcdg:Column Title="Ship Country" 
    CellContentTemplate="{StaticResource ShipCountryDataTemplate}" 
    FieldName="ShipCountry" /> 

DataTemplate

<DataTemplate x:Key="ShipCountryDataTemplate" DataType="{x:Type dat:Order}"> 
     <TextBlock x:Name="txt" 
      Text="{Binding}" /> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=xcdg:DataRow, AncestorLevel=1}, Path=DataContext.EmployeeChanged, Mode=OneWay}" Value="True"> 
       <Setter TargetName="txt" Property="Background" Value="Red" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
+0

Благодаря тонну, это работая для меня, по крайней мере, в этом конкретном fic. Реальная реализация сложнее и требует, чтобы конвертер искал данные в другом месте, поэтому я построю это и надеюсь, что все это все еще работает в конце! – CaseyR

Смежные вопросы