1

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

我遇到麻烦的地方是尝试更改详细信息部分中单个 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>

...

4

1 回答 1

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 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> 
于 2013-11-08T15:39:41.440 回答