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> 
Другие вопросы по тегам