如何在自动生成的 wpf DataGridCells 中设置绑定选项?

How to set binding options in wpf DataGridCells that are auto generated?

我在我的 ViewModels 中使用 IDataErrorInfoDataAnnotations 来进行验证,我想在我的 DataGrid 中使用它们进行验证。我想要的细胞行为可以在 TextBox:

中轻松模拟
<TextBox Name="TestBox"
    Text="{Binding TextProperty, UpdateSourceTrigger=PropertyChanged, 
    ValidatesOnDataErrors=True, NotifyOnValidationError=True}"/>

但是,在我的 DataGrid 中,列是自动生成的,我无法像手动定义它们那样设置 ValidatesOnDataErrors 绑定选项。

我想做的是按照样式中的这些行做的事情,因为我不想改变绑定的值,只想改变它的绑定选项:

<Style TargetType="DataGridCell">
    <Setter Property="Content" Value="{Binding Path=., UpdateSourceTrigger=PropertyChanged, 
    ValidatesOnDataErrors=True, NotifyOnValidationError=True}"/>
</Style>

但这不起作用。我不确定在 setter 中使用什么 属性,因为 DataGridCell 有一个内部 TextBoxTextBlock,以及究竟是什么处理了单元格的验证。

有什么想法吗?

在您的数据网格上,挂钩 "AutoGeneratingColumn" 事件。

在事件处理程序中,您可以使用 e.Column 获取绑定并进行调整。不过,您必须先将 e.Column 转换为正确的类型(例如 DataGridTextColumn)。

<DataGrid AutoGenerateColumns="True" Name="dg" AutoGeneratingColumn="dg_AutoGeneratingColumn" />

代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        dg.ItemsSource = new List<MyItem>() { new MyItem() { Item1 = "Item 1", Item2 = "Item 2" } };
    }

    private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        var tc = e.Column as System.Windows.Controls.DataGridTextColumn;
        var b = tc.Binding as System.Windows.Data.Binding;

        b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
        b.ValidatesOnDataErrors = true;
        b.NotifyOnValidationError = true;
    }
}

public class MyItem
{
    public string Item1 { get; set; }
    public string Item2 { get; set; }
}