Xceed WPF DataGrid-主/细节:根据数据更改细节部分中单元格的背景颜色

Xceed WPF DataGrid-主/细节:根据数据更改细节部分中单元格的背景颜色,wpf,xaml,master-detail,xceed,xceed-datagrid,Wpf,Xaml,Master Detail,Xceed,Xceed Datagrid,我是WPF的新手,这可能解释了我做这件事的困难。作为我想做的一个例子,我正在使用Xceed的MasterDetial示例应用程序的简化版本,该应用程序将员工作为主应用程序,并将与每个员工关联的订单作为详细信息。详细配置正在运行。我之所以使用这个示例,是因为我需要在更大、更复杂的应用程序中使用相同的功能 我遇到的麻烦是试图更改细节部分中单个数据单元的背景色。举个例子,假设我已经展开了第一个主(雇员)行,并得到了一个订单列表。每个订单都有一个ShipCountry字段。如果ShipCountry的值

我是WPF的新手,这可能解释了我做这件事的困难。作为我想做的一个例子,我正在使用Xceed的MasterDetial示例应用程序的简化版本,该应用程序将员工作为主应用程序,并将与每个员工关联的订单作为详细信息。详细配置正在运行。我之所以使用这个示例,是因为我需要在更大、更复杂的应用程序中使用相同的功能

我遇到的麻烦是试图更改细节部分中单个数据单元的背景色。举个例子,假设我已经展开了第一个主(雇员)行,并得到了一个订单列表。每个订单都有一个ShipCountry字段。如果ShipCountry的值为“Poland”,我想将ShipCountry单元格(仅该单元格)的背景更改为红色

尽管存在目标类型的DataCell,但下面的代码对整行执行此操作。我不明白为什么会这样。根据我在搜索这个问题时发现的东西,我尝试了很多不同的方法,但没有一种有效。我觉得我遗漏了一些明显的东西,这是一个简单的绑定问题,但这正是我成为WPF(和Xceed网格)新手的障碍所在

任何帮助都将不胜感激



…我认为你的第一个例子的问题是:

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> 


非常感谢,至少在这个特定场景中,这对我来说是有效的。真正的实现更加复杂,需要一个转换器在别处查找数据,所以我将在此基础上构建,希望最终一切都能正常工作!非常感谢,至少在这个特定的场景中,这对我来说是有效的。真正的实现更加复杂,需要一个转换器在别处查找数据,所以我将在此基础上构建,希望最终一切都能正常工作!