4

注意-我的课程是EntityObject课程!

我有以下课程:

public class Foo
{
    public Bar Bar { get; set; }
}

public class Bar : IDataErrorInfo
{
    public string Name { get; set; }

    #region IDataErrorInfo Members
    string IDataErrorInfo.Error
    {
        get { return null; }
    }

    string IDataErrorInfo.this[string columnName]
    {
        get
        {
            if (columnName == "Name")
            {
                return "Hello error!";
            }
            Console.WriteLine("Validate: " + columnName);
            return null;
        }
    }
    #endregion
}

XAML 如下:

<StackPanel Orientation="Horizontal" DataContext="{Binding Foo.Bar}">
     <TextBox Text="{Binding Path=Name, ValidatesOnDataErrors=true}"/>
</StackPanel>

我在那里设置了一个断点和一个Console.Writeline验证 - 我没有休息。不执行验证。任何人都可以将我按在我的错误所在的地方吗?

4

6 回答 6

2

这可能是一个愚蠢的答案,但默认情况下,绑定会在LostFocus发生时调用 setter。如果您还没有这样做,请尝试这样做。

如果您希望在每次按键时触发错误代码,请UpdateSourceTrigger=PropertyChanged在绑定内部使用。

于 2011-07-18T11:35:44.740 回答
1

您应该创建包含 Bar 类引用的本地窗口资源,并使用其键设置 StackPanel 数据上下文属性。另外,不要忘记在窗口或用户控件中导入其命名空间。

您的 XAML 代码应如下所示:

<Window x:Class="Project.WindowName"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="clr-namespace:BarNamespace">  
<Window.Resources>
 <local:Bar x:Key="bar" />
</Window.Resources>
<StackPanel Orientation="Horizontal" DataContext="{StaticResource bar}">
      <TextBox Text="{Binding Path=Name, ValidatesOnDataErrors=true}"/>
</StackPanel> 
</Window>
于 2012-01-07T20:13:42.907 回答
1

我不熟悉 EntityObject 类,也无法在 .NET Framework 文档或快速谷歌搜索中找到它。

无论如何,你需要做的我们也使用NotifyOnValidationError

<TextBox Text="{Binding Path=Name, ValidatesOnDataErrors=true, NotifyOnValidationError=true}"/>
于 2011-01-04T19:16:54.423 回答
1

您忘记在“Bar”类上实现 INotifyPropertyChanged,那么只有绑定系统会触发设置器。

因此,您的“名称”属性很可能应该是。

public string Name 
    { 
          get{ return _name; } 
      set
      {
          _name = value;
          RaisePropertyChanged("Name"); // Or the call might OnPropertyChanged("Name");
      }
    }
于 2010-03-22T15:31:10.917 回答
1

尝试在绑定上设置 Mode=TwoWay

于 2011-06-14T01:34:34.280 回答
-1

您应该将实现 IDataErrorInfo 的方法设为公开。

于 2011-05-27T10:18:26.960 回答