Xceed WPF DataGrid-主/细节:根据数据更改细节部分中单元格的背景颜色
我是WPF的新手,这可能解释了我做这件事的困难。作为我想做的一个例子,我正在使用Xceed的MasterDetial示例应用程序的简化版本,该应用程序将员工作为主应用程序,并将与每个员工关联的订单作为详细信息。详细配置正在运行。我之所以使用这个示例,是因为我需要在更大、更复杂的应用程序中使用相同的功能 我遇到的麻烦是试图更改细节部分中单个数据单元的背景色。举个例子,假设我已经展开了第一个主(雇员)行,并得到了一个订单列表。每个订单都有一个ShipCountry字段。如果ShipCountry的值为“Poland”,我想将ShipCountry单元格(仅该单元格)的背景更改为红色 尽管存在目标类型的DataCell,但下面的代码对整行执行此操作。我不明白为什么会这样。根据我在搜索这个问题时发现的东西,我尝试了很多不同的方法,但没有一种有效。我觉得我遗漏了一些明显的东西,这是一个简单的绑定问题,但这正是我成为WPF(和Xceed网格)新手的障碍所在 任何帮助都将不胜感激Xceed WPF DataGrid-主/细节:根据数据更改细节部分中单元格的背景颜色,wpf,xaml,master-detail,xceed,xceed-datagrid,Wpf,Xaml,Master Detail,Xceed,Xceed Datagrid,我是WPF的新手,这可能解释了我做这件事的困难。作为我想做的一个例子,我正在使用Xceed的MasterDetial示例应用程序的简化版本,该应用程序将员工作为主应用程序,并将与每个员工关联的订单作为详细信息。详细配置正在运行。我之所以使用这个示例,是因为我需要在更大、更复杂的应用程序中使用相同的功能 我遇到的麻烦是试图更改细节部分中单个数据单元的背景色。举个例子,假设我已经展开了第一个主(雇员)行,并得到了一个订单列表。每个订单都有一个ShipCountry字段。如果ShipCountry的值
…我认为你的第一个例子的问题是:
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 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>
我认为您的第一个示例的问题是:
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 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>
非常感谢,至少在这个特定场景中,这对我来说是有效的。真正的实现更加复杂,需要一个转换器在别处查找数据,所以我将在此基础上构建,希望最终一切都能正常工作!非常感谢,至少在这个特定的场景中,这对我来说是有效的。真正的实现更加复杂,需要一个转换器在别处查找数据,所以我将在此基础上构建,希望最终一切都能正常工作!