在我的模型中,我有以下属性
public List<IColumnElement> MenuItems
{
get
{
return new List<IColumnElement>() { new Table(), new FieldSet() };
}
}
它被Itemssource
绑定到上下文菜单并创建两个元素&#34;表&#34;和#34; FieldSet&#34;。如果单击该元素,则应将绑定对象添加到集合中。但是,绑定List仅生成一次,并始终返回相同的两个对象....
是否有一个很好的解决方案让绑定始终返回Table
和FieldSet
的新对象?
答案 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");
以触发绑定更新。
作为旁注,我会考虑将您的设计调整为仅具有上下文菜单列表选项,并且当从上下文菜单中选择相应选项时,让您的代码隐藏/视图模型负责构建必需对象。