我有一个主视图和相应的ViewModel。因为主视图太复杂所以我将它分成许多小视图;每个小视图也有自己的ViewModel。
我的问题是如何在主视图中“将子ViewModel关联到子视图”?
我正在做以下方式,不确定它是否正确或我必须使用DataTemplate?
<StackPanel>
<local:SmallView-A DataContext="{x:Type local:SmallViewModel-A}" />
</StackPanel>
<StackPanel>
<local:SmallView-B DataContext="{x:Type local:SmallViewModel-B}" />
</StackPanel>
<StackPanel>
<local:SmallView-C DataContext="{x:Type local:SmallViewModel-C}" />
</StackPanel>
答案 0 :(得分:0)
我想说正确的anwser如下: - )......(未经测试!)
在MainView中,将内容展示器绑定到该属性
<DataTemplate DataType="{x:Type ViewModels:SubViewModel1}">
<Views:SubView1 />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:SubViewModel2}">
<Views:SubView2 />
</DataTemplate>
public SubViewModel1 Sub1 { get; set; }
public SubViewModel2 Sub2 { get; set; }
<Grid>
## your layout here
<ContentPresenter Content="{Binding Sub1}" />
<ContentPresenter Content="{Binding Sub2}" />
##could be
<TabControl ItemSource="{Binding MyViewModelCollection}" />
</Grid>
答案 1 :(得分:0)
事实证明可能使用以下代码。
<ContentControl Content="{Binding MyViewInstance}">
<ContentControl.Resources>
<DataTemplate DataType="x:Type vm:MyViewModel">
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
答案 2 :(得分:-1)
在你的观看中&#39;文件夹(如果你还没有,请创建一个)创建一个名为`SmallViewA&#39;的新用户控件。
在你的主要XAML中:
xmlns:views = "clr-namespace:[Your app name].Views"
<views:SmallViewA x:Name = "vSmallViewA" Loaded = "SmallViewALoaded"/>
private void SmallViewALoaded(object sender, RoutedEventArgs e)
{
vSmallViewA.DataContext = YoursmallAViewModelshouldgohere;
// Initialise
}
在Views文件夹中添加SmallViewA
控件SmallViewA
控件。从那里,您可以绑定SmallViewA
Viewmodel。
按照上述SmallViewB
和SmallViewC
注意:请务必将INotifyPropertyChanged
实施到您的ViewModel。