使用caliburn在MVVM应用程序中设置模型的建议

时间:2014-09-04 03:41:05

标签: c# wpf mvvm caliburn.micro

我是MVVM的新手,所以我想弄清楚最好的方法是什么。我正在使用带有Caliburn Micro的WPF。

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

我的模型基本上类似于以下

 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”}};

然后树视图将是

| _ one

B'/ P>

| _ one

C

| _ one

关于如何根据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`。似乎后者会更合理。

  3. TIA

1 个答案:

答案 0 :(得分:0)

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

至于将数据带入视图,您可以通过DI / IoC的组合,通过相关ViewModel上的构造函数注入来完成。其中大部分是通过接口完成的,可以在您选择的SimpleContainer中选择SimpleContainer,如果您愿意,或者您选择的IOC / DI容器,可以使用任何容器进行扩展。使用Interfaces可以对视图模型进行模拟和单元测试。

通过实现作为PropertyChangedBase类对象的一部分的INotifyPropertyChange,通常通过您所拥有的内容来完成对视图的更改的冒泡。

可能会让人头疼的一件事就是基于ObservableCollection的集合并不一定会冒泡集合中底层项目属性的变化,这是SO上完全不同的主题