关于使用calburn在MVVM应用程序中设置模型的建议

本文关键字:模型 设置 应用程序 于使用 calburn MVVM | 更新日期: 2023-09-27 18:20:38

我是MVVM的新手,所以我正在努力找出最好的方法。我使用WPF与Caliburn Micro。

对于我试图操作的模型,我有两个不同的视图(每个视图都有各自的视图模型)。一个视图在树视图中显示模型,而另一个视图显示数据的表视图。

我的模型基本上看起来像下面的

 public class Foo
 {
  public string Name {get;set;}
  public string[] Categories {get;set;}
 }

视图是可视化Foo集合的不同方式。表视图非常简单,但树视图会根据Foo所包含的类别对其进行分组。

因此,如果Foo的实例类似

var fo=new Foo(){Name="one",Categories=new[]{"a","b","c"}};

然后树视图将是

|_一个

b

|_一个

c

|_一个

关于如何按照MVVM的精神将模型连接到视图模型,我有两个问题。

  1. 从不同视图的模型中填充视图模型的最佳方式是什么?我在想一个类似于从视图模型访问的单例FooManager的东西。还是使用校准SimpleContainer更适合于此?

  2. 比方说,我在表视图中通过更改Foo的类别集合来操作它。我将如何将更改传播到树视图,因为这意味着Foo将出现在不同的树节点中?Foo是否需要实现PropertyChangedBase' and somehow bubble up the changes to the other ViewModel? Or would it be better for FooManager to implement PropertyChangedBase`。似乎后者更合理。

TIA

关于使用calburn在MVVM应用程序中设置模型的建议

对于更改的集合,引用BindableCollection并显示在视图中。

至于将数据带入视图,您可以通过DI/IoC的组合,通过在有问题的ViewModel上注入构造函数来实现。大部分都是通过接口完成的,这些接口可以在您选择的容器中找到,如果您喜欢,可以从SimpleContainer到MEF,或者您真正选择的IOC/DI容器,该框架可以扩展到任何容器。使用接口可以对视图模型进行模拟和单元测试。

是的,对视图的更改冒泡通常是通过实现作为PropertyChangedBase类对象一部分的INotifyPropertyChange来完成的。

有一件事可能会引起它的反感,那就是基于ObservableCollection的Collections不一定会在集合中冒泡底层项属性的更改,这是SO 上完全不同的线程