Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF绑定,始终创建新对象_C#_Wpf_Binding - Fatal编程技术网

C# WPF绑定,始终创建新对象

C# WPF绑定,始终创建新对象,c#,wpf,binding,C#,Wpf,Binding,在我的模型中,我有以下属性 public List<IColumnElement> MenuItems { get { return new List<IColumnElement>() { new Table(), new FieldSet() }; } } 公共列表菜单项 { 得到 { 返回新列表(){new Table(),new FieldSet()}; } } 它作为Itemssource绑定到上下文菜单,并创建两个元素“Table”和“

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

public List<IColumnElement> MenuItems
{
  get
  {
    return new List<IColumnElement>() { new Table(), new FieldSet() };
  }
}
公共列表菜单项
{
得到
{
返回新列表(){new Table(),new FieldSet()};
}
}
它作为
Itemssource
绑定到上下文菜单,并创建两个元素“Table”和“FieldSet”。如果单击元素,则绑定对象应添加到集合中。但是,绑定列表只生成一次,并且始终返回相同的两个对象


是否有一个好的解决方案可以使绑定始终为
表和
字段集返回新对象?

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

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

为了方便起见,通常需要实现提供接口的基类和

internal void RaisePropertyChanged(String propertyName)
{
    if (PropertyChanged != null)
    {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
然后调用
RaisePropertyChanged(“MenuItems”)以触发绑定更新


作为一个旁注,我会考虑调整你的设计以拥有上下文菜单列表选项,并且当你从上下文菜单中选择相应的选项时,让你的代码隐藏/视图模型负责构建必要的对象。p> WPF绑定通常是响应变化而发生的。当您第一次启动时,该属性最初是绑定的(在您看到它的时候),但是直到您的代码告诉WPF该属性已经更改,它才会再次检查

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

为了方便起见,通常需要实现提供接口的基类和

internal void RaisePropertyChanged(String propertyName)
{
    if (PropertyChanged != null)
    {
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}
然后调用
RaisePropertyChanged(“MenuItems”)以触发绑定更新


作为一个旁注,我会考虑调整你的设计以拥有上下文菜单列表选项,并且当你从上下文菜单中选择相应的选项时,让你的代码隐藏/视图模型负责构建必要的对象。p> 该代码在调用getter时创建一个新列表,这并不理想。改为创建私有属性,并在getter中检查

if(_list==null)_list=newlist(){new Table(),new FieldSet()}
,然后您可以
返回_列表
,这样只会创建它once@Rachel不,相反。每次单击关联菜单项时,我都需要一个新对象,但似乎绑定只会在第一次绑定时创建
列表
,因此总是返回相同的对象。哦,好的,我明白了。。。在这种情况下,您可能希望使用
ICommand
在单击时触发,从而重新创建列表。只要调用getter,该代码就会创建一个新列表,这并不理想。改为创建私有属性,并在getter中检查
if(_list==null)_list=newlist(){new Table(),new FieldSet()}
,然后您可以
返回_列表
,这样只会创建它once@Rachel不,相反。每次单击关联菜单项时,我都需要一个新对象,但似乎绑定只会在第一次绑定时创建
列表
,因此总是返回相同的对象。哦,好的,我明白了。。。在这种情况下,您可能希望使用
ICommand
在单击时触发,从而重新创建列表。太好了,每次调用
RaisePropertyChanged(nameof(MenuItems))
都会生成/绑定一个新对象。哦,我多么期待有一天能使用
nameof
。。。硬编码字符串杀死了我,但我被困在.NET4=(很好,调用
RaisePropertyChanged(nameof(MenuItems))
每次都会生成/绑定一个新对象。噢,我多么期待有一天能使用
nameof
啊……硬编码字符串杀死了我,但我被困在.NET4上=(