WPF数据绑定对象在代码中更改,但未反映在UI中



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,并在更改其自身属性(您称之为OtherOptionOtherProperty等)时激发PropertyChanged

当视图模型选择不同的Employee时,您现在得到的将更新UI,但对该Employee的后续更改不会发送任何通知。

最新更新