我有一个简单的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>
答案 0 :(得分:0)
这通常通过数据绑定实现。如果向数据类添加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>