Xceed WPF DataGrid - Master/Detail: изменение цвета фона ячейки в подробном разделе на основе данных.
Я новичок в WPF, который может объяснить трудности, с которыми я сталкиваюсь. В качестве примера того, что я хочу сделать, я использую упрощенную версию примера приложения Xceed MasterDetial, в котором сотрудники в качестве мастера и заказы, связанные с каждым сотрудником в качестве сведений. Детали конфигурации работают. Я использую этот пример, потому что мне нужно, чтобы та же функциональность работала в гораздо большем и более сложном приложении.
Там, где я сталкиваюсь с проблемами, я пытаюсь изменить цвет фона одного DataCell в разделе подробностей. В качестве примера, скажем, я расширил первую строку мастера (сотрудника) и вернул список заказов. Каждый заказ имеет поле ShipCountry. Если значением ShipCountry является "Poland", я хочу изменить фон ячейки ShipCountry (и ТОЛЬКО той ячейки) на Red.
Ниже это делается для всей строки, несмотря на наличие целевого типа 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>
Или другой способ, которым я это делаю, находится в табличной табличке с данными:
Декларация столбца:
<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>