我在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定义我自己的对象并通过我的转换器为所有空值返回它?这似乎超级黑客 .

编辑:固定代码 .