我有这个代码部分执行此操作:
NotifyPropertyChanged("SelectLevelEnabled");
NotifyPropertyChanged("Plate");
我原以为这最终会调用SelectLevelEnabled和Plate的getter,但是它只会调用Plate getter 。我已经尝试将SelectLevelEnabled更改为其他名称,但仍然没有调用getter。
我的PropertyChanged实现如下,它始终运行良好:
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
SelectLevelEnabled属性为:
public bool SelectLevelEnabled
{
get
{
return SelectedStatus != null && SelectedStatus.Id == DB_Status_Types.Dentro;
}
}
我试过了:
答案 0 :(得分:1)
我在撰写问题时发现的答案是,SelectLevelEnabled 必须已经被View 绑定,因此它预订由PropertyChanged调用并调用getter。
答案 1 :(得分:0)
如果您从其他线程(主线程除外)调用属性更改,则该更改不会更新。 您可以使用Application.Current.Dispatcher.BeginInvoke()告诉主线程更新属性。
Application.Current.Dispatcher.BeginInvoke((Action)(() => { MyProperty = newValue; }, new object[] { }); // method parameters go in the object array initializer.