【问题标题】:How to style WPF datagrid based on binded property如何根据绑定属性设置 WPF 数据网格的样式
【发布时间】:2019-10-08 08:34:55
【问题描述】:

我已经被 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 上指定的内容发生变化,但这似乎不起作用。我不知道我应该更改代码的哪一部分。

【问题讨论】:

    标签: c# wpf xaml mvvm datagrid


    【解决方案1】:
    //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>
    

    【讨论】:

      【解决方案2】:

      如果正确理解您的代码,则 GridRow 上下文看不到 ColorStyle,因为它不在 TransactionList 中,而是与 ItemsSource 位于同一位置。你需要做的

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

      或将 ColorStyle 转移到 TransactionList 类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多