使用[属性]验证EF4的更改方法

时间:2012-02-23 13:45:11

标签: c# wpf entity-framework validation

我有一个WPF应用程序,其中包含由EF4创建的数据层。 在其中一个屏幕上,我显示一个容器(权利名称:master),其中包含多个elemenbts(实体名称:project)。

主人的状态可以打开或关闭(由用户设置),但如果所有项目都没有关闭,则无法关闭。

我在实体framewok中使用了部分类来执行此操作:

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>

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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