C#/ WPF:的PropertyChanged在视图模型的所有属性?
-
13-09-2019 - |
题
我有这样一类:
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属性..)?
感谢您的帮助。
干杯 约瑟夫
解决方案
您可以指示所有属性都使用null
或string.Empty
在PropertyChangedEventArgs
属性名称更改。这样做是为了的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);
}
不隶属于 StackOverflow