在 ViewModel 和 Command 之间进行通信
本文关键字:通信 之间 Command ViewModel | 更新日期: 2023-09-27 17:57:16
正在创建一个小型收银员应用程序,我的 CashView 模型按日期过滤了销售额。
现在,我添加了一个历史记录按钮来显示按日期分组的销售额(在窗口中),然后当用户选择日期时,我的 Date 属性会更改,因此我将该按钮绑定到 RelayCommand。
public RelayCommand HistoryCommand
{
get
{
return _historyCommand
?? (_historyCommand = new RelayCommand(
() =>
{
//?????????
}));
}
}
我的问题在回调操作中,出于测试原因,我不想直接从这里调用窗口。
我应该使用消息传递(如果是这样,我应该创建一个消息接收器,或者是否有其他选项???)
您可以创建一个 WindowService(它直接调用窗口),并将其注入到视图模型中。
例如:
public interface IWindowService
{
Result ShowWindow(InitArgs initArgs);
}
public sealed class WindowService : IWindowService
{
public Result ShowWindow(InitArgs initArgs);
{
//show window
//return result
}
}
public class CashViewModel
{
private IWindowService m_WindowService;
public CashViewModel(IWindowService windowService)
{
m_WindowService = windowService;
}
public RelayCommand HistoryCommand
{
get
{
return _historyCommand
?? (_historyCommand = new RelayCommand(
() =>
{
var result = m_WindowService.ShowWindow(args);
}));
}
}
}
你可以在那里给出函数名称。
private ICommand _historyCommand;
public ICommand HistoryCommand
{
get { return _historyCommand?? (_historyCommand= new RelayCommand(MyFunction)); }
}
private void MyFunction()
{
// Function do something.
}
您可以使用EventAggregator
Prism 框架的实现。它使您能够在不知道发送方和/或接收方的情况下发送和接收事件。
当您收到相关事件时,您可以只执行相关代码来显示视图。