繁体   English   中英

如何在自动生成的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绑定选项。

我想做的是在样式中遵循这些原则,因为我不想更改Binding的值,所以只更改其Binding Options:

<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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM