无需数据绑定即可将数据更新到数据网格

时间:2011-08-12 10:12:54

标签: c# wpf .net-4.0

是否可以更新数据网格中的数据而不必将其绑定到特定对象并仍然享受“双向”数据绑定的好处?在这种情况下,要绑定的对象类型在运行时根据用户输入决定。

更清晰:

实际上我使用的是多线程应用程序,我需要从另一个线程更新UI中的数据。为此,我共享一个Observable Collection对象的引用,并将其(通过ItemsSource)绑定到数据网格。现在,每当线程更新数据时,它都会调用UI线程中的特定函数,要求它刷新数据网格。当我尝试修改网格中的某个值以便将其发送回并行运行的线程时,就会出现问题。它抛出一个异常“在AddNew或EditItem事务期间不允许使用'DeferRefresh'。”

3 个答案:

答案 0 :(得分:1)

使用DataGridView,您可以在运行时更改数据源并仍然享受双向绑定...只需将DataSource设置为null。

如果由于某种原因你不能这样做,你可能会考虑对象组合:即将你的网格绑定到一个中间对象,它只是为你在运行时'绑定'的实际对象保存一个变量,并创建包装器实现(IList,IListSource,IBindingList或IBindingListView)。

除非我错过了什么?

答案 1 :(得分:0)

您可以在运行时根据用户输入动态创建绑定代码

除此之外,我认为没有任何方法可以在没有数据绑定的情况下实现双向绑定。一旦丑陋的方式可以处理itemssource和DataGrid中的数据更改事件,并且在事件更新时另一个控件,即在datassource和itemssource发生更改的情况下数据网格,以便在datagrid中更改值,手动

答案 2 :(得分:0)

当您设置(不绑定)ItemsSource时,DataGrid的内部实现会自动在行和单元级别进行绑定。所以我无法理解“如何”我们不能将对象绑定到数据网格并享受它的两种方式更新。

当你设置ItemsSource时它们会发生...或者你不想甚至设置ItemsSource?