我们正在使用 MVVM 实现 WPF 业务应用程序。 目前,我们正在尝试确定显示 DataGrid 验证错误的最佳方式。 目前我们正在尝试这样做:
1) View 用户控件包含绑定到位于关联 ViewModel 中的实体框架对象 EntityCollection 的数据网格
2)ViewModel 实现了 IDataErrorInfo 接口。 在 ViewModel 中有一些普通属性,包括用于实现 IDataErrorInfo.Item
的属性3)实现 IDataErrorInfo.Item 的属性从底层模型调用验证以确定是否存在任何验证问题
这适用于视图上的任何文本框或组合框 - 验证正在按预期进行处理。 但对于数据网格,我们被难住了 - 无论我们尝试什么,验证都不会发生。目前它的定义是这样的:
<DataGrid x:Name="dgWikiNames" ItemsSource="{Binding Wiki_Names, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnSourceUpdated=True}" AutoGenerateColumns="False">
<DataGrid.RowValidationRules>
<DataErrorValidationRule ValidationStep="UpdatedValue"/>
</DataGrid.RowValidationRules>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name">
<DataGridTextColumn.Binding>
<Binding Path="First_Name" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<DataErrorValidationRule/>
<!--<local:CellDataInfoValidationRule ValidationStep="UpdatedValue"/>-->
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
<DataGridTextColumn Header="Is Primary" Binding="{Binding Primary_Flag}"/>
</DataGrid.Columns>
</DataGrid>
如果有人有任何指示或建议,我们将不胜感激。 谢谢
将以下内容添加到您的绑定中:
ValidatesOnDataErrors="True" NotifyOnValidationError="True"
确保以下内容适合您
添加 Itemsource 作为 ObservableCollection 属性 属性。 [ItemsSource="{绑定测量}"]
System::Collections::ObjectModel::ObservableCollection
而MeasurementData是参考类,它实现了IDataErrorInfo,并且该类具有高度、宽度、深度等属性。
2.将 DataGridTextColumn 绑定到单个属性(高度、宽度、深度)。
Binding="{Binding Height, Delay=1000, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, NotifyOnValidationError=True, ValidatesOnNotifyDataErrors=True, ValidatesOnExceptions=True}"
3.添加设置器以突出显示 WPF 中的红色装饰器到
4.在IDataErrorInfo中,您可以获得需要添加验证逻辑的属性索引器。
希望对你有帮助