我有这样一类:

public class PersonViewModel : ViewModelBase //Here is the INotifyPropertyChanged Stuff
{
    public PersonViewModel(Person person)
    {
        PersonEntity = person;
    }

    public Person PersonEntity { 
        get { return PersonEntity.Name; }
        private set { PersonEntity.Name = value; RaisePropertyChanged("PersonEntity");
    }

    public string Name { 
        get { return PersonEntity.Name; }
        set { PersonEntity.Name = value; RaisePropertyChanged("Name");
    } 
    public int Age{ 
        get { return PersonEntity.Age; }
        set { PersonEntity.Age= value; RaisePropertyChanged("Age");
    } 

    public void ChangePerson(Person newPerson)
    {
        //Some Validation..
        PersonEntity = newPerson;
    }

我的文本框被绑定到名称和视图模型的年龄。 如果我改变_person对象视图模型,我必须再次呼吁各物业一RaisePropertyChanged还是有办法做到这一点全自动(在我的形而下的例子,我有大约15属性..)?

感谢您的帮助。

干杯 约瑟夫

有帮助吗?

解决方案

您可以指示所有属性都使用nullstring.EmptyPropertyChangedEventArgs属性名称更改。这样做是为了的PropertyChanged 的文件中提及。

其他提示

一个其它溶液I用来解决的问题:第一设定值,然后调用PropertyChangedEventArgs是通过将在我的Set一个ViewModelBase函数看起来像这样:

public class ViewModelBase : INotifyPropertyChanged
{
    protected bool Set<T>(ref T backingField, T value, [CallerMemberName] string propertyname = null)
    {
        // Check if the value and backing field are actualy different
        if (EqualityComparer<T>.Default.Equals(backingField, value))
        {
            return false;
        }

        // Setting the backing field and the RaisePropertyChanged
        backingField = value;
        RaisePropertyChanged(propertyname);
        return true;
   }
}

代替这样做的:

public string Name { 
    get { return PersonEntity.Name; }
    set { PersonEntity.Name = value; RaisePropertyChanged("Name");
} 

您现在可以通过这样实现相同的:

public string Name { 
    get { return PersonEntity.Name; }
    set { Set(ref PersonEntity.Name,value);
} 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top