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

时间:2016-03-29 20:21:57

标签: wpf data-binding

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”的复选框时,实体代码中更改的其他属性不会反映在视图上,并保留在用户编辑的屏幕上。

请让我知道我错过了什么。谢谢!

2 个答案:

答案 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的属性)进行更改OtherOptionOtherProperty等等。)

当视图模型选择不同的Employee时,您现在获得的内容会更新用户界面,但对Employee的后续更改不会发送任何通知。