我有一个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>
但我不知道为了防止组合框的变化。我想要做的是在发生此错误时显示一个消息框,并将旧值设置回来,直到它可以验证,但我找不到如何获取此消息,或替换该值。
提前感谢您的帮助!
答案 0 :(得分:0)
我强烈建议使用IDataErrorInfo接口进行任何验证,因为WPF是为了使用它而构建的。然后,您可以像这样设置绑定以使用内置验证:
<ComboBox SelectedValue="{Binding CurrentMaster.StatusId, ValidatesOnDataErrors=True}" ... />