首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDataErrorInfo通知

IDataErrorInfo通知
EN

Stack Overflow用户
提问于 2012-05-01 23:24:00
回答 1查看 719关注 0票数 0

我在使用IDataErrorInfo时遇到了问题,下面是一个示例

代码语言:javascript
复制
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MainWindowViewModel();
    }
}

public class MainWindowViewModel : INotifyPropertyChanged, IDataErrorInfo
{
    public List<Person> _source1 = null;
    public List<Person> Source1
    {
        get
        {
            return _source1 ?? (_source1 = new List<Person>()
                {
                    new Person(){ Nom ="one"}
                });
        }
    }

    public List<Person> _source2 = null;
    public List<Person> Source2
    {
        get
        {
            return _source2 ?? (_source2 = new List<Person>()
                {
                    new Person(){ Nom ="two"}
                });
        }
    }


    private Person _selectedItem1;
    public Person SelectedItem1 { get { return _selectedItem1; } set { _selectedItem1 = value; RaisePropertyChanged("SelectedItem1"); } }
    private Person _selectedItem2;
    public Person SelectedItem2 { get { return _selectedItem2; } set { _selectedItem2 = value; RaisePropertyChanged("SelectedItem2"); } }

    public MainWindowViewModel()
    {
        //This is the actual way, i solve my problem
        //this.PropertyChanged += (sender, e) =>
        //    {
        //        if (e.PropertyName == "SelectedItem1")
        //        {
        //            RaisePropertyChanged("SelectedItem2");
        //        }
        //    };
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get {

            string errors= string.Empty;

            if (columnName == "SelectedItem2")
            {
                if(this.SelectedItem1 != null && this.SelectedItem2 == null)
                    errors = "erreur";
            }

            return errors;
        }
    }
}

public class Person
{
    public string Nom { get; set; }        
}

正如您所看到的,我必须通知您,由于选择了SelectedItem1,所以SelectedItem2是wonder,但是红角没有出现。下面是xaml代码。

代码语言:javascript
复制
<Window x:Class="WpfApplication5.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <ComboBox ItemsSource="{Binding Path=Source1}" DisplayMemberPath="Nom" SelectedItem="{Binding Path=SelectedItem1}"/>
    <ComboBox ItemsSource="{Binding Path=Source2}" DisplayMemberPath="Nom" SelectedItem="{Binding Path=SelectedItem2,ValidatesOnDataErrors=True}"/>
</StackPanel>

是解决这个问题的更好方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 14:59:16

我觉得你要做的就是

代码语言:javascript
复制
public Person SelectedItem1 
{ 
    get { return _selectedItem1; } 
    set 
    { 
       _selectedItem1 = value; 
       RaisePropertyChanged("SelectedItem1"); 
       RaisePropertyChanged("SelectedItem2"); 
    } 
}

这将导致在更改SelectedItem1时重新评估SelectedItem2上的验证。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10399915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档