关于使用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的精神将模型连接到视图模型,我有两个问题。
从不同视图的模型中填充视图模型的最佳方式是什么?我在想一个类似于从视图模型访问的单例
FooManager
的东西。还是使用校准SimpleContainer
更适合于此?比方说,我在表视图中通过更改Foo的类别集合来操作它。我将如何将更改传播到树视图,因为这意味着Foo将出现在不同的树节点中?Foo是否需要实现
PropertyChangedBase' and somehow bubble up the changes to the other ViewModel? Or would it be better for
FooManagerto implement
PropertyChangedBase`。似乎后者更合理。
TIA
对于更改的集合,引用BindableCollection并显示在视图中。
至于将数据带入视图,您可以通过DI/IoC的组合,通过在有问题的ViewModel上注入构造函数来实现。大部分都是通过接口完成的,这些接口可以在您选择的容器中找到,如果您喜欢,可以从SimpleContainer到MEF,或者您真正选择的IOC/DI容器,该框架可以扩展到任何容器。使用接口可以对视图模型进行模拟和单元测试。
是的,对视图的更改冒泡通常是通过实现作为PropertyChangedBase类对象一部分的INotifyPropertyChange来完成的。
有一件事可能会引起它的反感,那就是基于ObservableCollection的Collections不一定会在集合中冒泡底层项属性的更改,这是SO 上完全不同的线程