【问题标题】:Force IDataErrorInfo validation强制 IDataErrorInfo 验证
【发布时间】:2012-11-02 22:17:05
【问题描述】:

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

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

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

当我在组合框中选择某些内容时,我需要强制对文本框进行 idataerrorinfo 验证。该怎么做?

viewmodel 的代码:

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;
      }
    }

【问题讨论】:

    标签: wpf validation idataerrorinfo


    【解决方案1】:

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

    【讨论】:

    • 是的...NotifyPropertyChanged 有效)我之前尝试过,但忘记了两种方式...
    • 我在 ActiveStageViewModel 上使用了 [AlsoNotifyFor("ShapeName")]
    • 它有点工作......在我的情况下,我有一个TabControl,当用户第一次点击保存时,在最后一个选项卡中,我提出NotifyPropertyChanged 并显示错误。但是,当我返回其他选项卡并再次切换回最后一个选项卡时,提高 NotifyPropertyChanged 不起作用,没有显示错误模板。有什么见解吗?
    • @JobaDiniz 你有解决方案了吗?
    • @JobaDiniz 好的,我找到了一个解决方案,以备不时之需so link
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多