我正在學習WPF和MVVM(或者至少我正在嘗試......)。在Buttonclick上更改視圖
我創建了一個小樣本應用程序,它顯示一個帶有2個按鈕的窗口,每個應該顯示一個新的點擊視圖。所以我創建了3個UserControls(帶有2個按鈕的DecisonMaker,以及每個「clicktarget」的一個Usercontrol)。
所以我在MainWindowViewModel綁定的主窗口的CotentControl到一個名爲 「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。但是,每個人的回答都非常棒,謝謝大家!
視圖模型應該沒有參照的圖/用戶控件。所以你應該從你的viewmodel中刪除它。這是一個很好的起點:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – blindmeis