0

我正在尝试使用树视图实现导航菜单。在左侧面板上有一个树视图,在右侧面板上有匹配的视图。因为它是 MVVM,所以我很难在正确的视图之间切换。

在此处输入图像描述

单击 Menu1 - 应显示 View1.xaml 视图 单击 Menu2 - 应显示 View2.xaml 视图

我的代码如下所示:MainView.xaml

<Window x:Class="Menu.View.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Views="clr-namespace:Menu.View"
        Title="MainView" Height="300" Width="300">
    <Window.Resources>
        <DataTemplate DataType="{x:Type Views:Page1}">
            <Views:Page1 />
        </DataTemplate>
        <DataTemplate DataType="{x:Type Views:Page2}">
            <Views:Page2 />
        </DataTemplate>
    </Window.Resources>
    <DockPanel>
        <Grid DockPanel.Dock="Left">
            <TreeView>
                <TreeViewItem Header="Menu 1" />
                <TreeViewItem Header="Menu 2" />
                <TreeViewItem Header="Menu 3" />
            </TreeView>
        </Grid>

        <Grid DockPanel.Dock="Right">
                <Views:Page1 />
                <Views:Page2 />
        </Grid>
    </DockPanel>
</Window>

Page1.xaml(单击“菜单 1”时应该可见的视图)

<Grid>
    <Label FontSize="24" FontWeight="Bold">1</Label>
</Grid>

Page2.xaml(单击“菜单 2”时应该可见的视图)

<Grid>
    <Label FontSize="24" FontWeight="Bold">2</Label>
</Grid>

对于每个页面,我都有自己的 ViewModel,并且我有一个名为 MainViewModel 的主要页面。我应该如何在 MVVM 模式下实现这样的事情?

4

1 回答 1

0

我认为这是错误的。您应该将 ViewModel 放入 DataType 中。因此,当您填充 DataContext 时,DataTemplate 会完成他的工作。就像是 :

   <DataTemplate DataType="{x:Type ViewModels:Page1ViewModel}">
                <Views:Page1 />
            </DataTemplate>
            <DataTemplate DataType="{x:Type ViewModels:Page2ViewModel}">
                <Views:Page2 />
            </DataTemplate>

代替 :

<Views:Page1 />
<Views:Page2 />

添加一个 ContentControl 并对其内容进行绑定,如下所示:

<ContentControl Content="{Binding MyViewModel}"></ContentControl>

myView 是 MainViewViewModel 中的属性(必须实现 INotifyPropertyChanged)可以是这样的:

        object _MyView;
        public object MyViewModel
        {
            get
            {
                return _MyView;
            }
            set
            {
                _MyView = value;
                OnPropertyChanged("MyViewModel");
            }
        }

现在,在每个 TreeViewItem 添加一个命令来更新它的内容为 ex :

在您的 MainViewViewModel 添加 CallView1Command 属性并实现它(查看如何处理命令)

因此在 Command 的执行方法中,您可以根据要显示的 View 更新 MyViewModel。

我建议使用Unity来实例化 ViewModel。

不是很好解释,但是,无论如何希望它有所帮助

于 2012-06-27T08:55:25.410 回答