Jac*_*eja 7 wpf design-patterns mvvm
最近关于View Models(VM)的问题让我感到很紧张.
就像这个人一样,我得出结论,我需要在我的VM上公开的集合通常包含与业务对象上公开的集合不同的类型.
因此,必须在这两种类型之间进行双向映射或转换.(只是为了使事情复杂化,在我的项目中,这些数据是"实时"的,这样一旦你更改了一个属性,它就会被传输到其他计算机)
我可以使用像桁架这样的框架来应对这个概念,尽管我怀疑在某个地方会有一个令人讨厌的惊喜.
不仅必须转换对象,还需要在这两个集合之间进行同步.(只是为了使我能想到的事情复杂化,VM集合可能是业务对象集合的子集或联合,而不仅仅是1:1的同步).
我可以看到如何使用复制的ObservableCollection或像CLINQ这样的单向"实时"同步.
然后问题变成:创建/删除项目的最佳方法是什么?
双直接同步似乎没有出现 - 我没有发现这样的例子,唯一支持远程的类就是ListCollectionView.双向同步甚至是添加回业务对象集合的合理方式吗?
我见过的所有样品似乎都没有解决任何这种"复杂"的问题.
所以我的问题是:你如何解决这个问题?是否有一些技术可以从VM更新模型集合?对此最好的一般方法是什么?
我也正在努力解决两个集合的双向同步问题,以便通过 MVVM 与 WPF 一起使用。我在博客中写了MVVM:包装还是不包装?ViewModel 应该包裹 Model 多少?(第 1 部分)和MVVM:换行还是不换行?ViewModel 也应该包装集合吗?(第 2 部分)关于该问题,包括一些显示双向同步的示例代码。然而,正如帖子中指出的,实施并不理想。我将其视为概念证明。
我喜欢Alex_P 发布的BLINQ、CLINQ和Obtics框架。这是获得同步行为一侧的非常好的方法。也许另一端(从虚拟机到模型)可以通过替代路径实现?我刚刚在我的博客上发布了第 3 部分,其中讨论了其中的一些内容。
据我所知,在 LINQ 语句将数据投影到新结构的情况下,不支持通过 BLINQ 和 CLINQ 进行双向。
但是,在 LINQ 查询返回与底层集合相同的数据类型的情况下,CLINQ 看起来确实可以支持双向同步。这更多的是一个过滤场景,与将数据包装在模型中的 ViewModel 的用例不匹配。
归档时间: |
|
查看次数: |
3241 次 |
最近记录: |