在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>

但我不知道如何阻止组合框的变化。我想做的是在出现此错误时显示一个消息框,并将旧值设置回,直到它可以验证为止,但我找不到如何获取此消息或替换该值。

提前感谢您的帮助!

在EF4的[Property]更改方法上使用的验证

我强烈建议使用IDataErrorInfo接口进行任何验证,因为WPF是为了使用它而构建的。然后,您可以将绑定设置为使用内置验证:

<ComboBox SelectedValue="{Binding CurrentMaster.StatusId, ValidatesOnDataErrors=True}" ... />