WPF-MVVM初学者。我的问题是:在WPF-MVVM UI中,我正在编辑一个实体。某些属性更改后,需要自动更新其他属性。这些都是在Entity类中完成的,设置方法,但没有反映在我的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"的复选框时,在实体代码中更改的其他属性不会反映在视图中,而是停留在用户编辑的屏幕上。
请让我知道我缺了什么。谢谢
您应该在模型中实现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));
}
}
Employee
需要像视图模型一样实现INotifyPropertyChanged
,并在更改其自身属性(您称之为OtherOption
、OtherProperty
等)时激发PropertyChanged
当视图模型选择不同的Employee
时,您现在得到的将更新UI,但对该Employee
的后续更改不会发送任何通知。