强制执行 IDataErrorInfo 验证

15

我在某个面板上有两个控件:文本框和组合框:

<TextBox Text="{Binding ShapeName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

<ComboBox SelectedItem="{Binding ActiveStageViewModel, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

当我在组合框中选择某个内容时,我需要强制对文本框进行idataerrorinfo验证。如何做到这一点?

来自视图模型的代码:

string IDataErrorInfo.this[string propertyName]
    {
      get
      {
        var error = string.Empty;

        if (propertyName == Expression.GetPropertyName(() => ActiveStageViewModel))
        {
          // TODO: Add functionality to force ShapeName property validation
          return error;
        }

        if (propertyName == Expression.GetPropertyName(() => ShapeName))
        {
          error = ValidateShapeName();
        }

        TooltipMessage = error;
        return error;
      }
    }
2个回答

23

只需为要验证的属性引发NotifyPropertyChanged事件,或者如果您在.NET 4.5或Silverlight 4中使用,则使用INotityDataErrorInfo


是的...NotifyPropertyChanged可以工作。我以前尝试过,但忘记了双向模式... - Witcher
我在ActiveStageViewModel上使用了[AlsoNotifyFor("ShapeName")]。 - Martina
1
它有点奏效... 在我的情况下,我有一个TabControl,在最后一个选项卡中,当用户第一次点击保存时,我会引发NotifyPropertyChanged,并显示错误。然而,当我返回到其他选项卡,并再次切换回最后一个选项卡时,引发NotifyPropertyChanged不起作用,没有显示错误模板。有什么见解吗? - JobaDiniz
@JobaDiniz 你对此有解决方案了吗? - EpicKip
1
@JobaDiniz 好的,我找到了一个解决方案,如果你需要,可以参考这个链接:链接 - EpicKip

16
值得记住的是,您可以使用String.Empty属性来触发NotifyPropertyChanged。这将强制验证该级别上的所有属性。有时会很有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接