Как стилизовать сетку данных WPF на основе привязанного свойства - PullRequest
0 голосов
/ 08 октября 2019

Я застрял в стиле DataGrid на несколько часов. Я искал много решений, но безрезультатно, я не смог применить стиль к своему дизайну.

У меня есть это в моем View.xaml:

<DataGrid x:Name="dgTransactions"
          CanUserAddRows="False"
          ColumnHeaderStyle="{StaticResource HeaderStyle}"
          ItemsSource="{Binding TransactionLists, Mode=TwoWay}">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ColorStyle}" Value="Red">
                    <Setter Property="Background" Value="Red"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ColorStyle}" Value="Blue">
                    <Setter Property="Background" Value="Blue"></Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding ColorStyle}" Value="Green">
                    <Setter Property="Background" Value="Green"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

Что яВ этом коде нужно добиться того, чтобы при изменении значения ColorStyle цвет фона строки данных также изменялся в зависимости от того, что было указано в DataTrigger, но, похоже, это не работает. Я не знаю, какую часть моего кода я должен изменить.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

если правильно понял ваш код, то контекст GridRow не видит ColorStyle, потому что он не находится в TransactionList, а находится в том же месте, что и ItemsSource. Вам нужно сделать

<DataTrigger Binding = "{Binding RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = DataGrid}, Path = DataContext.ColorStyle}" Value = "Green">

или перевести ColorStyle в класс TransactionList

1 голос
/ 11 октября 2019
//may it help don't need to code in .cs just in .xaml
//just add your properties in binding let me know if any error

 <DataGrid.RowStyle>
    <Style TargetType="DataGridRow"> 
        <Style.Triggers>
            <DataTrigger Binding="{Binding _age}" Value="20">
                <Setter Property="Background" Value="Red"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding _ismale}" Value="true">
                <Setter Property="Background" Value="Green"></Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...