gpt4 book ai didi

WPF MVVM - 如何在单击按钮时从 MainWindowViewModel 显示 View

转载 作者:行者123 更新时间:2023-12-03 10:12:25 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




10年前关闭。




Possible Duplicate:
The best approach to create new window in WPF using MVVM



你好 friend ,

我有两个 View 主窗口 View 添加客户 View .我在 MainwindowView.xmal 中有包含按钮的菜单。

我怎么会弹出 通过单击按钮从 MainWindowViewModel AddCustomerView。

我的 App.xmal.cs 启动代码是..
base.OnStartup(e);
MainWindow window = new MainWindow();
var viewModel = new MainWindowViewModel();
window.DataContext = viewModel;
window.Show();

在按钮执行代码中显示 AddCustomerView 的代码是什么。
 public void AddNewCustomerWindowExecute() //This is button handler
{
// How to show AddCustomerView from MainWindowViewModel
}

最佳答案

在 View 中处理

可能是最简单的方法。

private void AddCustomerView_Click(object sender, RoutedEventArgs e)
{
AddCustomerView view = new AddCustomerView(data);
view.Show();
}

ViewModel 暴露一个事件

这有一个缺点:它需要大量的手动编码。
public class MainWindowViewModel 
{
public event EventHandler AddCustomerViewShowed;

public void AddNewCustomerWindowExecute()
{
if (AddCustomerViewShowed != null)
AddCustomerViewShowed(this, EventArgs.Empty);
}
}

在 View 中处理
var viewModel = new MainWindowViewModel();
viewModel.AddCustomerViewShowed += (s, e) => new AddCustomerView(data).Show();

处理所有 View 的 Controller
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();
}
}

中介模式

一些 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(...));
}
}

关于WPF MVVM - 如何在单击按钮时从 MainWindowViewModel 显示 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5829413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com