将ViewModel关联到视图

时间:2018-04-10 11:56:27

标签: wpf mvvm

我有一个主视图和相应的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>

3 个答案:

答案 0 :(得分:0)

我想说正确的anwser如下: - )......(未经测试!)

  1. 在generic.xaml中,关联视图和视图模型
  2. 在MainViewModel中为每个子视图模型创建属性
  3. 在MainView中,将内容展示器绑定到该属性

    通用

    <DataTemplate DataType="{x:Type ViewModels:SubViewModel1}">
        <Views:SubView1 />
    </DataTemplate>
    
    <DataTemplate DataType="{x:Type ViewModels:SubViewModel2}">
        <Views:SubView2 />
    </DataTemplate>
    

    MainViewModel

    public SubViewModel1 Sub1 { get; set; }
    public SubViewModel2 Sub2 { get; set; }
    

    的MainView

    <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。

中的属性

按照上述SmallViewBSmallViewC

的相同步骤操作

注意:请务必将INotifyPropertyChanged实施到您的ViewModel。