【问题标题】:PropertyChanged doesn't fires specific getterPropertyChanged 不会触发特定的 getter
【发布时间】:2014-10-21 12:53:19
【问题描述】:

我有这样的代码部分:

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

我试过了:

  • 切换到发布/调试
  • 向 SelectLevelEnabled 添加设置器
  • 将 NotifyPropertyChanged("Plate") 更改为其他属性,似乎一切正常。问题在于 SelectLevelEnabled。

【问题讨论】:

  • 有什么在监听这个变化吗?
  • 不是...我注意到这个问题并添加为答案。

标签: c# visual-studio-2010 inotifypropertychanged


【解决方案1】:

我在写问题时发现的答案是,SelectLevelEnabled 必须已被 View 绑定,因此它订阅由 PropertyChanged 调用并调用 getter。

【讨论】:

  • 没错。如果没有绑定视图,则框架没有理由在数据更改时通知视图/从视图
【解决方案2】:

如果您从不同的线程(除了主线程)调用属性更改,它不会更新。 您可以使用 Application.Current.Dispatcher.BeginInvoke() 告诉主线程更新属性。

Application.Current.Dispatcher.BeginInvoke((Action)(() => { MyProperty = newValue; }, new object[] { }); // method parameters go in the object array initializer.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多