PropertyChanged不会触发特定的getter

时间:2014-10-21 12:53:19

标签: c# visual-studio-2010 inotifypropertychanged

我有这个代码部分执行此操作:

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;
    }
}

我试过了:

  • 切换到发布/调试
  • 将setter 添加到SelectLevelEnabled
  • 将NotifyPropertyChanged(“Plate”)更改为其他属性, all似乎正常工作。问题在于SelectLevelEnabled。

2 个答案:

答案 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.