WPF MVVM - Jak wyświetlić widok z MainWindowViewModel po kliknięciu na przycisk [duplikat]
Możliwy duplikat:
najlepsze podejście do tworzenia nowego okna w WPF przy użyciu MVVM
Witajcie Przyjaciele,
Mam dwa widoki MainWindowView i AddCustomerView . Mam menu zawierające przyciski w MainwindowView.xmal.
Jak mogę popup AddCustomerView z MainWindowViewModel klikając na przycisk.
Moja Aplikacja.xmal.cs Dla kodu startowego jest..base.OnStartup(e);
MainWindow window = new MainWindow();
var viewModel = new MainWindowViewModel();
window.DataContext = viewModel;
window.Show();
Jaki jest kod do wyświetlania AddCustomerView w buttonexecute code.
public void AddNewCustomerWindowExecute() //This is button handler
{
// How to show AddCustomerView from MainWindowViewModel
}
2 answers
Uchwyć to w widoku
Prawdopodobnie najprostsze podejście.
private void AddCustomerView_Click(object sender, RoutedEventArgs e)
{
AddCustomerView view = new AddCustomerView(data);
view.Show();
}
ViewModel wyświetla Zdarzenie
Ma to jedną wadę: wymaga wielu ręcznych kodowań.
public class MainWindowViewModel
{
public event EventHandler AddCustomerViewShowed;
public void AddNewCustomerWindowExecute()
{
if (AddCustomerViewShowed != null)
AddCustomerViewShowed(this, EventArgs.Empty);
}
}
Uchwyć to w widoku
var viewModel = new MainWindowViewModel();
viewModel.AddCustomerViewShowed += (s, e) => new AddCustomerView(data).Show();
Kontroler, który obsługuje wszystkie Twoje widoki
public class Controller : IController
{
public void AddCustomer()
{
AddCustomerView view = new AddCustomerView(data);
view.Show();
}
}
public class MainWindowViewModel
{
IController controler;
public MainWindowViewModel(IController controller)
{
this.controller = controller;
}
public void AddNewCustomerWindowExecute()
{
controller.AddCustomer();
}
}
Wzór mediatora
Niektóre frameworki MVVM (np.MVVM Light ) używają tego wzorca.
public class App // or in the view or somewhere else
{
public void RegisterMessenger()
{
Messenger.Default.Register<AddCustomerMessage>(this, ProcessAddCustomerMessage);
}
private void ProcessAddCustomerMessage(AddCustomerMessage message)
{
AddCustomerView view = new AddCustomerView(data);
view.Show();
}
}
public class MainWindowViewModel
{
public void AddNewCustomerWindowExecute()
{
Messenger.Default.Send(new AddCustomerMessage(...));
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-29 08:19:51
Zobacz ten "deep dive MVVM video". Laurent Bugnion pokazuje pojęcie IDialogService i wyjaśnia pojęcia bardzo dobrze... dodatkowo kod źródłowy powinien być również dostępny... Pojęcia te stosuje się również do wpf
Http://channel9.msdn.com/Events/MIX/MIX11/OPN03
HTH
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-29 08:03:06