【问题标题】:How do I style multiple cells of a datagrid based on the same trigger?如何根据同一个触发器设置数据网格的多个单元格的样式?
【发布时间】:2014-04-03 12:06:21
【问题描述】:

我有一个带有一列文本和一列带有复选框的简单 DataGrid,并且基于一些相当复杂的条件,我想设置文本样式并设置或禁用复选框。我可以为两个单元实现相同的触发器,但这似乎是臃肿且不必要的,我正在寻找最有效的方法来做到这一点。好像应该是可以的,我就是一头雾水。

        <DataGrid>
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Label Name="needToStyleThis" VerticalAlignment="Center"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTemplateColumn Header="" Width="Auto">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox x:Name="needToSetIsChecked"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>

【问题讨论】:

    标签: wpf datagrid triggers styles converter


    【解决方案1】:

    这通常通过数据绑定来实现。如果您将bool 属性添加到您的数据类,那么您可以在类的属性设置器中执行您的复杂条件。在类中,您可以轻松更改依赖于任何其他值的任何属性值。也许是这样的:

    public string Text
    {
        get { return text; }
        set 
        {
            text = value;
            NotifyPropertyChanged("Text");
            IsEnabled = text == "some value" && otherSomeConditions == true;
        }
    }
    

    然后您可以将其数据绑定到 Checkbox.IsEnabled 属性,如下所示:

    <DataGrid>
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Label Name="needToStyleThis" VerticalAlignment="Center"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="" Width="Auto">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsEnabled="{Binding IsEnabled}" ... />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
    

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多