![]() |
1
3
我也在努力通过MVVM与WPF一起使用两个集合的双向同步。我博客 MVVM: To Wrap or Not to Wrap? How much should the ViewModel wrap the Model? (Part 1) 和 MVVM: To Wrap or Not to Wrap? Should ViewModels wrap collections too? (Part 2) 关于这个问题,包括一些显示双向同步的示例代码。然而,正如各员额所指出的,执行情况并不理想。我认为这是概念的证明。 我喜欢 BLINQ , CLINQ ,和 Obtics Alex_p发布的框架。这是一个非常好的方法,以获得同步贝瓦瓦伊奥的一面。也许另一面(从虚拟机到模型)可以通过另一条路径实现?我刚刚张贴 part 3 在我的博客上讨论了其中的一些问题。 据我所见,在Linq语句将数据投影到新结构的情况下,不支持通过blinq和clinq实现双向。 但是,在Linq查询返回与基础集合相同的数据类型的情况下,它看起来确实支持双向同步。这更像是一个过滤场景,与包装模型中数据的ViewModel的用例不匹配。 |
![]() |
2
4
就我个人而言,我在我的模型和视图模型中使用了一个可观察的集合。
现在,当您从模型的foo集合中删除某些内容时,它将自动删除相应的fooview。这与我对这类事情的看法是一致的。如果我想删除一些东西,模型就是真正需要删除的地方。 这感觉像很多代码,但实际上并没有那么多。我相信有人可以构建这个的通用版本,但是在我看来,你最终总是想要处理元素添加/删除的定制逻辑。 |
![]() |
3
3
唯一可能需要双向同步的情况是,用于可视化虚拟机集合的控件不让您知道用户创建或删除项目的意图。也就是说,控件直接处理您的虚拟机集合,您知道该项已被添加/删除的唯一方法是监视虚拟机集合。如果不是这样,那么可以实现单向同步,并直接在模型集合上添加/删除项。
至于同步过程本身,请看 Bindable LINQ 项目-它可以最小化数量代码并提高可读性。例如,Tom发布的代码将转换为如下内容:
|
![]() |
4
1
我已经编写了一些助手类,用于将可观察的业务对象集合包装在它们的视图模型对应物中。 here 或许应该把它延伸到另一个方向。一直在寻找贡献… |
![]() |
5
1
我提出了一个基于MVVM的通用撤消/重做框架,它使用了一些与您描述的问题相关的技术。它使用实现此接口的集合:
(V表示视图模型项,D表示模型项) 使用此接口,它会在模型集合更改时自动同步ViewModel集合。如果更改了ViewModel,则只需将更改重定向到模型集合。 getviewitem函数在viewModel对象与模型对应对象的关系方面提供了一些灵活性。 你可以找到细节 here . (我承认施工相当复杂,我很乐意听取建议)。 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 6 月前 |
![]() |
Barta · WPF MVVM不更新视图 7 月前 |
![]() |
Denis Ivanov · WPF控件在属性更改时不会更新 7 月前 |
![]() |
codymanix · WPF:TextBlock周围可见小边框? 7 月前 |
![]() |
Nostromo · 来自背景对象的工具提示 11 月前 |
![]() |
Nuvolari · 从可观测集合添加/删除时出现对象处理异常 1 年前 |
![]() |
CCarter · 只能在设计器中DependencyObject的DependencyProperty上设置显示“Binding”的WPF ICommand DependencyProperties[重复] 1 年前 |
![]() |
Thern · 在UI线程(WPF)上的void方法中调用异步函数 1 年前 |