我开始在MVVM模式中重写我的整个silverlight业务应用程序; 我的第一个停留点是:
我有一个页面(View1)和相应的ViewModel1(带有'IEnumerable AllData'属性);
现在,在这个视图中,我希望有一个树视图控件,其中一个节点将填充另一个View2;
我的问题是: 1.怎么做? - 我无法遍历AllData属性,因为它是异步加载的... - 因此我不知道要插入的View2的数量 - 我不知道如何从ViewModel1 :(
由于
答案 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