Winforms MVVM GridView 数据绑定
Winforms MVVM GridView DataBinding
我正在尝试在 MVVM 模式中使用 BindingList<T>
绑定 GridView。
在我的代码中,我绑定gridview如下:
BindingSource bindingSource = new BindingSource(Context.MyList, null);
bindingSource.CurrentChanged += Context.BindingSourceCurrentItemChanged;
// NOTE: this part is to test if the event is fired...
Context.MyList.ListChanged += myList_ListChanged;
myGrid.DataSource = bindingSource;
我有一个添加按钮,它调用上下文中的方法作为 ICommand
:
Context.myCommand.Execute(null);
最后,在命令本身(在上下文 class 中),我执行以下操作:
MyList.Add(new Item());
非常直接的实现... bindingSource.CurrentChanged
确实触发了,但我从未进入 myList_ListChanged
事件。
如果我停止启动 ICommand
并添加几个项目,Context.MyList
计数确实会更新。如果我使用删除命令也会发生同样的情况...
这里有什么明显的遗漏吗???
提前致谢,
N.
编辑
我意识到问题来自于我将 MyList 作为 属性 的事实,如下所示:
BindingList<T> myList;
public BindingList<T> MyList {
get {
if (myList == null) { myList = new BindingList<T>();}
return myList;
}
}
我在表单的构造函数中创建了 BindingSource
,而我在 ViewModel 绑定完成后调用了以下代码:
myList = new BindingList<T>
RaisePropertyChanged("MyList");
我知道这是 WPF 的想法,它可以无缝地更新数据绑定。
据我了解,BindingSource
似乎不监听数据源本身的变化(即指向对象的指针),而不是其内容的变化。
有好心人可以确认一下这种行为吗?
谢谢!
N.
要解决此问题,只需按如下方式设置对数据源的绑定:
myGrid.DataBindings.Clear(); // binding must be unique, make sure it is!
myGrid.DataBindings.Add("DataSource", Context, "MyList");
那么,只要在"Context"级别有一个属性变化就可以了。
我正在尝试在 MVVM 模式中使用 BindingList<T>
绑定 GridView。
在我的代码中,我绑定gridview如下:
BindingSource bindingSource = new BindingSource(Context.MyList, null);
bindingSource.CurrentChanged += Context.BindingSourceCurrentItemChanged;
// NOTE: this part is to test if the event is fired...
Context.MyList.ListChanged += myList_ListChanged;
myGrid.DataSource = bindingSource;
我有一个添加按钮,它调用上下文中的方法作为 ICommand
:
Context.myCommand.Execute(null);
最后,在命令本身(在上下文 class 中),我执行以下操作:
MyList.Add(new Item());
非常直接的实现... bindingSource.CurrentChanged
确实触发了,但我从未进入 myList_ListChanged
事件。
如果我停止启动 ICommand
并添加几个项目,Context.MyList
计数确实会更新。如果我使用删除命令也会发生同样的情况...
这里有什么明显的遗漏吗???
提前致谢, N.
编辑 我意识到问题来自于我将 MyList 作为 属性 的事实,如下所示:
BindingList<T> myList;
public BindingList<T> MyList {
get {
if (myList == null) { myList = new BindingList<T>();}
return myList;
}
}
我在表单的构造函数中创建了 BindingSource
,而我在 ViewModel 绑定完成后调用了以下代码:
myList = new BindingList<T>
RaisePropertyChanged("MyList");
我知道这是 WPF 的想法,它可以无缝地更新数据绑定。
据我了解,BindingSource
似乎不监听数据源本身的变化(即指向对象的指针),而不是其内容的变化。
有好心人可以确认一下这种行为吗? 谢谢! N.
要解决此问题,只需按如下方式设置对数据源的绑定:
myGrid.DataBindings.Clear(); // binding must be unique, make sure it is!
myGrid.DataBindings.Add("DataSource", Context, "MyList");
那么,只要在"Context"级别有一个属性变化就可以了。