WPF-MVVM初学者在这里。 我的问题:在WPF-MVVM UI中我正在编辑一个实体。更改时的某些属性需要对其他属性进行自动更新。这些是在Entity类,set方法中完成的,但没有反映在我的View
中更多细节: 1)我在一个单独的程序集中有一个Model(一个带有属性的简单类)(不是WPF相关的,因为它是一般的商业模型)。请注意,“SomeOption”设置为false时,需要一些其他选项才能自动更改。 例如:
public class Employee : BaseEntity
{
public string EmployeeNumber { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
....
private bool someOption
public bool SomeOption {
get
{ return someOption}
set {
someOption= value;
if (!value)
{
OtherOption = false;
OtherProperty= "";
AndAnotherOption= false;
}
}
}
}
2)WPF UI有一个实现INotifyPropertyChanged的基本ViewModel。当前编辑的记录(Employee)是ViewModel的公共属性:
public Employee SelectedEmployee
{
get { return _selectedEmployee; }
set
{
if (_selectedEmployee != value)
{
_selectedEmployee = value;
OnPropertyChanged(nameof(SelectedEmployee));
}
}
}
3)当取消选中绑定到“SomeOption”的复选框时,实体代码中更改的其他属性不会反映在视图上,并保留在用户编辑的屏幕上。
请让我知道我错过了什么。谢谢!
答案 0 :(得分:1)
您应该在模型中实施INotifyPropertyChanged
以更新UI中的实体。例如:
public class Employee : BaseEntity, INotifyPropertyChanged
{
private string employeeNumber;
public string EmployeeNumber {
get{return employeeNumber};
set
{
employeeNumber=value;
OnPropertyChanged("EmployeeNumber");
}
//...Other properties...
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
答案 1 :(得分:1)
Employee
需要像您的视图模型一样实施INotifyPropertyChanged
,并对其自身属性(您正在调用PropertyChanged
的属性)进行更改OtherOption
, OtherProperty
等等。)
当视图模型选择不同的Employee
时,您现在获得的内容会更新用户界面,但对Employee
的后续更改不会发送任何通知。