在我正在进行的项目中,我没有与我的数据网格绑定的普通CLR对象。通常,我会使用ObservableCollection <MyObject>
,但现在我不能,而是我必须使用自定义对象(其行为类似于DataTable,但具有自定义逻辑)。
我的问题是:如何创建一个代理/适配器对象,将我的datagrid单元格中的项目的每个绑定操作“转换”为我的自定义逻辑对象?
请记住:
现在我们正在从自定义对象重新创建一个DataTable,以使他的DataView显示在数据网格中,我们拦截带有事件的编辑命令(这很丑陋),然后在每次更改单元格值时从头开始重新加载所有内容。 / p>
我搜索了有关如何实现这一目标的提示,但我找到的是:
正如您所看到的,选择一种实现良好代理的方法令人困惑。
答案 0 :(得分:1)
我建议创建一种ViewModel作为模型(这个没有集合但被视为一个的神秘对象)和View(DataGrid)之间的适配器。在搜索Model-View-ViewModel时,您会找到此模式的各种示例。 然后您可以自己定义属性,只需要在属性上实现一些合适的get / set-methods,将ViewModel-changes转换为原始Model,反之亦然(如果需要)。
答案 1 :(得分:1)
最后我找到了一个解决方案,我在this web site中使用了第二种方法:并且创建了一个继承自IBindingList和ITypedList的对象来伪造该项是一个列表,我在每个假行上也使用了ICustomTypeDescriptor并调用主表对象。
答案 2 :(得分:0)
.net 4.0可用。您可以通过继承动态属性将在xaml中绑定的DynamicObject(仅限.net 4.0)轻松创建代理。如果您代理DataTable,则必须在代理上实施INotifyCollectionChanged
,如果您代理了项目,则需要在其代理上实施INotifyPropertyChanged
。