我在C#中写了一个WPF DataTrigger
,并希望触发器在值为null时触发 . 但是,如果我将 DataTrigger.Value
属性设置为null,则会触发所有绑定的触发器 . 当在绑定和触发器之间粘贴转换器时,我验证是否传入了null值,因此 DataTrigger
应该得到它 . 我的 DataGrid
包含整数,如果我将值设置为整数,它会在数字匹配时成功执行我的触发器 .
private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// disable null cells
var boundColumn = e.Column as DataGridBoundColumn;
if (boundColumn != null)
{
var binding = boundColumn.Binding as Binding;
if (binding != null)
{
var style = new Style(typeof(DataGridCell));
var dataTrigger = new DataTrigger
{
Binding = new Binding(binding.Path.Path)
{
TargetNullValue = binding.TargetNullValue
},
Value = null
};
dataTrigger.Setters.Add(new Setter(DataGridCell.IsEnabledProperty, false));
style.Triggers.Add(dataTrigger);
boundColumn.CellStyle = style;
}
}
}
上面的代码为所有行执行触发器(将 IsEnabled
设置为false) . 我也尝试将Value更改为 DependencyProperty.UnsetValue
并遇到同样的问题 . 如果我将Value更改为0,它将禁用包含0的所有单元格 . 我试图通过编写检查null的转换器并返回 DependencyProperty.UnsetValue
来解决这个问题,但这似乎永远不会执行触发器 . 我是否必须为null定义我自己的对象并通过我的转换器为所有空值返回它?这似乎超级黑客 .
编辑:固定代码 .