Attualmente sto imparando WPF e MVVM (o almeno sto cercando di ...).Modifica visualizzazione su Buttonclick
Ho creato una piccola app di esempio, che mostra una finestra con 2 pulsanti, ognuno dei quali dovrebbe mostrare una nuova vista su clic. Così ho creato 3 UserControls (DecisonMaker con i 2 pulsanti e un Usercontrol per ogni "clicktarget").
Così ho legato la CotentControl del MainWindow ad una proprietà chiamata "CurrentView" nel mio MainWindowViewModel
Codice di 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>
Codice di 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();
}
}
L'iniziale UserControl (Decision Maker) si presenta come supposto. Viene anche chiamato il metodo LoadMouseView
. Ma la vista non cambia. Cosa mi manca?
AGGIORNAMENTO: Grazie mille! Ho perso l'interfaccia INotifyPropertyChanged. Tutte le tue risposte sono state semplicemente fantastiche e molto accurate e utili! Non so quale accettare - Penso che sia il modo più giusto per accettare la "prima" risposta?
Ho accettato la risposta blindme, in quanto ha risolto il problema e mi ha aiutato a capire meglio MVVM. Ma ogni risposta è stata davvero grande, grazie a tutti voi!
viewmodel dovrebbe avere alcun riferimento ad una vista/usercontrol. quindi dovresti rimuoverlo dal tuo viewmodel. questo è un buon punto di partenza: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx – blindmeis