[英]How to set binding options in wpf DataGridCells that are auto generated?
我在ViewModels
使用IDataErrorInfo
和DataAnnotations
来进行验证,我想在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
有一个内部TextBox
或TextBlock
,以及究竟该如何处理单元格的验证。
有任何想法吗?
在您的数据网格上,钩住“ 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.