Каков наилучший способ сравнения содержимого ячеек данных в таблице данных WPF? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь сравнить содержимое ячеек данных из разных строк (сравнивая содержимое ячейки из строки x с соответствующей ячейкой (в том же столбце) в строке 0. Я использую DataTrigger в стиле DataGridCell и связываю свойство содержимого ячейки который содержит действительное значение, а во-вторых, я сам связываю сетку данных.В конвертере я делаю сравнение между значением из ячейки и значением из переданной сетки данных в строке 0. Это прекрасно работает для известных типов столбцов, таких как datagridText столбец или флажок DataGrid, потому что тогда я могу установить путь к фактическому свойству, которое содержит значение (Content.Text для текстового столбца и Content.IsChecked для столбца флажка) (см. ниже). Но я застрял с этим стратегия для TemplateColumn, в которой я комбинирую, например, CheckBox и TextBox, или ComboBox. В этом случае я не могу привязаться к свойству Content.Text или Content.IsChecked. Привязка к содержимому без свойства не работает, потому что триггер не сработал и конвертер не ударил.

Итак, каков наилучший подход для достижения этой цели, конечной целью является условное форматирование ячеек с отклонением содержимого от соответствующего столбца в строке 0 независимо от типа содержимого.

 <Style TargetType="{x:Type DataGridCell}" x:Key="MyCellStyle">
            <Style.Triggers>
                <DataTrigger Value="False">
                    <DataTrigger.Binding>
                        <MultiBinding UpdateSourceTrigger="PropertyChanged" Converter="{StaticResource policyComparisonConverter}">
                            <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=DataGrid}"/>
                            <Binding Path="Content.Text" RelativeSource="{RelativeSource Self}"/>
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Background" Value="Red" />
                    <Setter Property="Foreground" Value="White" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
...