私は現時点でWPFとMVVMを学んでいます(または少なくとも私はしようとしています...)。
2 つのボタンを持つウィンドウを表示する小さなサンプル アプリを作成しました。それぞれのボタンをクリックすると、新しいビューが表示されます。そこで、3 つの UserControls を作成しました (DecisonMaker には 2 つのボタンがあり、「クリックターゲット」ごとに 1 つの Usercontrol)。
そこで、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をよりよく理解するのに役立ったので、盲目の答えを受け入れました。でも、皆さんのおかげでどの回答も本当に素晴らしかったです!