Я изучаю WPF и MVVM на данный момент (или, по крайней мере, я пытаюсь ...).Изменение вида на Buttonclick
Я создал небольшое приложение-образец, в котором показано окно с двумя кнопками, каждое из которых должно показывать новый вид на клике. Поэтому я создал 3 UserControls (DecisonMaker с 2 кнопками и один Usercontrol для каждого «clicktarget»).
Так что я связала CotentControl из MainWindow в собственности под названием "CurrentView" в моем MainWindowViewModel
Код 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. Все ваши ответы были просто замечательными и очень точными и полезными! Я не знаю, какой из них принять - Я думаю, что это самый справедливый способ принять «первый» ответ?
Я принял ответ blindmeis, поскольку он решил проблему и помог мне лучше понять MVVM. Но каждый ответ был действительно большим благодаря всем вам!
ViewModel не должны иметь ссылку на вид/UserControl. поэтому вы должны удалить это из своей модели просмотра. это хорошая отправная точка: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – blindmeis