>我有一个简单的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>
这通常通过数据绑定来实现。如果将 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>