使用MenuItems切换ContentControl

时间:2015-03-12 22:29:25

标签: c# wpf mvvm

我是WPF和MVVM的新手并且绝望地失败了。我正在尝试创建一个包含多个可通过MenuItem切换的视图的简单窗口,我遇到了两个问题:

  1. 如何动态构建菜单项列表? (视图1,视图2,附图中的视图3)。
  2. 如何向这些菜单项添加命令以更改视图?
  3. Demo window showing the desired output.

    这是我当前生成窗口的代码。目前它不会更改视图。我的MainWindow包含菜单栏和将保存视图的ContentControl。 ContentControl的内容旨在在三个UserControl之间切换,名为UserControl1,UserControl2,UserControl3。

    <Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:View="clr-namespace:WpfApplication3.View"
        xmlns:ViewModel="clr-namespace:WpfApplication3.ViewModel"
        Title="MainWindow" Height="350" Width="525">
    
    <Window.Resources>
        <DataTemplate DataType="{x:Type ViewModel:UserControl1ViewModel}">
            <View:UserControl1/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type ViewModel:UserControl2ViewModel}">
            <View:UserControl2/>
        </DataTemplate>
        <DataTemplate DataType="{x:Type ViewModel:UserControl3ViewModel}">
            <View:UserControl3/>
        </DataTemplate>
    </Window.Resources>
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="22"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Menu Grid.ColumnSpan="2">
            <MenuItem Header="_File">
                <MenuItem Header="Quit" HorizontalAlignment="Left" Width="144.506666666667"/>
            </MenuItem>
            <MenuItem Header="_View">
                <MenuItem Header="View 1" HorizontalAlignment="Left" Width="144.506666666667"/>
                <MenuItem Header="View 2" HorizontalAlignment="Left" Width="144.506666666667"/>
                <MenuItem Header="View 3" HorizontalAlignment="Left" Width="144.506666666667"/>
            </MenuItem>
        </Menu>
        <ContentControl Content="{Binding View}" Grid.Row="1" Grid.ColumnSpan="2"/>
    </Grid>
    

    这是主窗口的WIP视图模型。我正在关注this教程作为起点并尝试修改它以满足我的需求。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using System.Collections.ObjectModel;
    
    namespace WpfApplication3.ViewModel
    {
        public class MainWindowViewModel : ViewModelBase
        {
            private readonly ObservableCollection<ControlViewModelBase> views;
            private int selectedView;
    
            public ControlViewModelBase View
            {
                get { return views[selectedView]; }
            }
    
            public MainWindowViewModel()
            {
                selectedView = 0;
                this.views = new ObservableCollection<ControlViewModelBase>();
    
                views.Add(new UserControl1ViewModel());
                views.Add(new UserControl2ViewModel());
                views.Add(new UserControl3ViewModel());
            }
        }
    }
    

    我之前的尝试看起来非常像WinForms,并且有很多代码可以捕获菜单项点击和视图切换。我正在尝试使用MVVM和数据绑定来实现这一点,但因为我仍然试图围绕这两个概念。

    P.S。如果您需要查看更多代码示例,请与我们联系

0 个答案:

没有答案