我是WPF和MVVM的新手并且绝望地失败了。我正在尝试创建一个包含多个可通过MenuItem切换的视图的简单窗口,我遇到了两个问题:
这是我当前生成窗口的代码。目前它不会更改视图。我的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。如果您需要查看更多代码示例,请与我们联系