在Silverlight&中动态添加视图MVVM

时间:2010-05-12 14:44:47

标签: silverlight mvvm mef

我开始在MVVM模式中重写我的整个silverlight业务应用程序; 我的第一个停留点是:

我有一个页面(View1)和相应的ViewModel1(带有'IEnumerable AllData'属性);

现在,在这个视图中,我希望有一个树视图控件,其中一个节点将填充另一个View2;

我的问题是: 1.怎么做? - 我无法遍历AllData属性,因为它是异步加载的... - 因此我不知道要插入的View2的数量 - 我不知道如何从ViewModel1 :(

  1. 我是否需要具有属性'MyDataEntity CurrentData'的ViewModel2?
    • 或者我可以从ViewModel1
    • 绑定到AllData属性
  2. 你可以帮帮我吗?

    由于

1 个答案:

答案 0 :(得分:1)

听起来你正试图把Master / Detail视图放在一起? MasterView包含所有DetailViews的TreeView。

所以ViewModel看起来像

public class DataListViewModel
{
    public DataDetailViewModel[] AllData {get;}
}

public class DataDetailViewModel
{
    public Data Model {get;}
    public DataListViewModel Parent {get;}
}

如果这或多或少准确,那么你有一个非常轻松的道路,你需要做的就是首先选择View或ViewModel。

使用View第一选择,您可以将DataTemplate用于将控制TreeViews项的TreeView。

<DataTemplate x:Key="dataTemplate">
  <my:DataDetailView DataContext="{Binding Path=.}" />
</DataTemplate>

确保您的View具有默认构造函数。

使用ViewModel首选,您将需要使用TemplateSelector,它将根据所设置的对象拉出正确的View。这可能是最灵活的,因为您可以使用基于Detail类的不同视图。

有关详情,请参阅该链接http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector