可能重复:
使用MVVM在WPF中创建新窗口的最佳方法
你好朋友,
我有两个视图MainWindowView和AddCustomerView.我在MainwindowView.xmal中有包含按钮的菜单.
如何通过单击按钮从MainWindowViewModel弹出AddCustomerView.
我的App.xmal.cs用于启动代码是..
base.OnStartup(e);
MainWindow window = new MainWindow();
var viewModel = new MainWindowViewModel();
window.DataContext = viewModel;
window.Show();
Run Code Online (Sandbox Code Playgroud)
在buttonexecute代码中显示AddCustomerView的代码是什么.
public void AddNewCustomerWindowExecute() //This is button handler
{
// How to show AddCustomerView from MainWindowViewModel
}
Run Code Online (Sandbox Code Playgroud)
mak*_*mak 22
可能是最简单的方法.
private void AddCustomerView_Click(object sender, RoutedEventArgs e)
{
AddCustomerView view = new AddCustomerView(data);
view.Show();
}
Run Code Online (Sandbox Code Playgroud)
这有一个缺点:它需要大量的手动编码.
public class MainWindowViewModel
{
public event EventHandler AddCustomerViewShowed;
public void AddNewCustomerWindowExecute()
{
if (AddCustomerViewShowed != null)
AddCustomerViewShowed(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中处理它
var viewModel = new MainWindowViewModel();
viewModel.AddCustomerViewShowed += (s, e) => new AddCustomerView(data).Show();
Run Code Online (Sandbox Code Playgroud)
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();
}
}
Run Code Online (Sandbox Code Playgroud)
一些MVVM框架(例如MVVM Light)使用这种模式.
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(...));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23555 次 |
| 最近记录: |