在EF4的[Property]更改方法上使用的验证
本文关键字:方法 验证 EF4 Property | 更新日期: 2023-09-27 18:25:37
我有一个WPF应用程序,其中有一个由EF4创建的数据层。在其中一个屏幕上,我显示了一个容器(实体名:master),其中包含多个elemebt(实体名为project)。
主控形状的状态可以是打开或关闭(由用户设置),但如果其所有项目都未关闭,则不能关闭。
我使用实体框架中的分部类来做这件事:
public partial class Master
{
partial void OnStatusIdChanging(int value)
{
if (value == 2) // Changing status to closed.
{
// Must check if all projects are closed.
if (this.Projects.Any(e => e.StatusId == 1))
{
throw new InvalidOperationException("All the underlying projects must be closed to set the master'status to closed.");
}
}
}
}
这在xaml:中是这样绑定的
<ComboBox Grid.Column="1" Margin="2" ItemsSource="{Binding MasterStatusTypes}" SelectedValuePath="Id" SelectedValue="{Binding CurrentMaster.StatusId, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
但我不知道如何阻止组合框的变化。我想做的是在出现此错误时显示一个消息框,并将旧值设置回,直到它可以验证为止,但我找不到如何获取此消息或替换该值。
提前感谢您的帮助!
我强烈建议使用IDataErrorInfo接口进行任何验证,因为WPF是为了使用它而构建的。然后,您可以将绑定设置为使用内置验证:
<ComboBox SelectedValue="{Binding CurrentMaster.StatusId, ValidatesOnDataErrors=True}" ... />