WPF绑定,始终创建新对象

时间:2016-06-08 15:10:32

标签: c# wpf binding

在我的模型中,我有以下属性

public List<IColumnElement> MenuItems
{
  get
  {
    return new List<IColumnElement>() { new Table(), new FieldSet() };
  }
}

它被Itemssource绑定到上下文菜单并创建两个元素&#34;表&#34;和#34; FieldSet&#34;。如果单击该元素,则应将绑定对象添加到集合中。但是,绑定List仅生成一次,并始终返回相同的两个对象....

是否有一个很好的解决方案让绑定始终返回TableFieldSet的新对象?

1 个答案:

答案 0 :(得分:2)

WPF绑定通常在响应更改时发生。当你第一次启动时,属性最初被绑定(有一次你看到它),但是直到你的代码告诉WPF属性已经改变,它才会再次检查。

告诉WPF该属性已更改的方法是通过实施INotifyPropertyChanged。包含MenuItems的类将实现该接口,然后当您希望WPF再次调用getter时,您将调用PropertyChanged事件,并将属性名称作为参数传入。

为方便起见,通常你会实现一个提供接口的基类,以及一个方法,如

internal void RaisePropertyChanged(String propertyName)
{
    if (PropertyChanged != null)
    {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后,您将调用RaisePropertyChanged("MenuItems");以触发绑定更新。

作为旁注,我会考虑将您的设计调整为仅具有上下文菜单列表选项,并且当从上下文菜单中选择相应选项时,让您的代码隐藏/视图模型负责构建必需对象。