gpt4 book ai didi

c# - Winforms MVVM GridView 数据绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:51 26 4
gpt4 key购买 nike

我正在尝试使用 BindingList<T> 绑定(bind) GridView在 MVVM 模式中。

在我的代码中,我按如下方式绑定(bind) 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);

最后,在命令本身(在 Context 类中)中,我执行以下操作:

MyList.Add(new Item());

非常直接的实现... bindingSource.CurrentChanged确实开火了,但我从来没有输入 myList_ListChanged事件。

如果我停止启动 ICommand并添加几个项目,Context.MyList count 确实更新了。如果我使用删除命令,也会发生同样的情况...

我在这里明显遗漏了什么吗???

提前致谢,N.

编辑我意识到问题来自于我将 MyList 作为属性的事实,如下所示:

BindingList<T> myList;
public BindingList<T> MyList {
get {
if (myList == null) { myList = new BindingList<T>();}
return myList;
}
}

我创建了 BindingSource在表单的构造函数中,而我在 ViewModel AFTER 中调用了以下代码,进行了绑定(bind):

myList = new BindingList<T>
RaisePropertyChanged("MyList");

我知道这是 WPF 的想法,它可以无缝地更新数据绑定(bind)。

据我了解,BindingSource似乎不监听数据源本身的变化(即指向对象的指针),而不是其内容的变化。

有好心人可以证实这种行为吗?谢谢!N.

最佳答案

要解决这个问题,只需按如下方式设置对数据源的绑定(bind):

myGrid.DataBindings.Clear(); // binding must be unique, make sure it is!    
myGrid.DataBindings.Add("DataSource", Context, "MyList");

然后,只要在“上下文”级别引发属性更改,就可以了。

关于c# - Winforms MVVM GridView 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28749295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com