我目前正在学习 WPF 和 MVVM(或者至少我正在尝试......)。
我创建了一个小示例应用程序,它显示了一个带有 2 个按钮的窗口,每个按钮都应在单击时显示一个新视图。所以我创建了 3 个用户控件(带有 2 个按钮的决策者,每个“点击目标”一个用户控件)。
因此,我将 MainWindow 的 CotentControl 绑定到 MainWindowViewModel 中名为“CurrentView”的属性
MainWindow.xaml 的代码:
<Window x:Class="WpfTestApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTestApplication"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding CurrentView, Mode=OneWay}" />
</Grid>
</Window>
MainWindowViewModel 代码:
class MainWindowViewModel
{
private UserControl _currentView = new DecisionMaker();
public UserControl CurrentView
{
get { return _currentView; }
set { _currentView = value; }
}
public ICommand MausCommand
{
get { return new RelayCommand(LoadMouseView); }
}
public ICommand TouchCommand
{
get { return new RelayCommand(LoadTouchView); }
}
private void LoadMouseView()
{
CurrentView = new UserControlMouse();
}
private void LoadTouchView()
{
CurrentView = new UserControlTouch();
}
}
最初的 UserControl (DecisionMaker) 会按预期显示。该方法LoadMouseView
也被调用。但是视图没有改变。我错过了什么?
更新:非常感谢!我错过了 INotifyPropertyChanged 接口。你所有的答案都很棒,非常准确和有帮助!我不知道该接受哪一个-我认为这是接受“第一个”答案的最公平方式?
我接受了盲目的回答,因为它解决了问题并帮助我更好地理解了 MVVM。但是每个答案都非常感谢你们所有人!