在ViewModel和Command之间进行通信

在ViewModel和Command之间进行通信

在创建一个小型收银应用程序时,我的 CashViewModel 销售日期过滤了。

现在,我添加了一个历史记录按钮以按日期分组显示销售(在窗口中),然后当用户选择一个日期时,我的日期属性会更改,因此我已将该按钮绑定(bind)到了RelayCommand。

 public RelayCommand HistoryCommand
    {
        get
        {
            return _historyCommand
                ?? (_historyCommand = new RelayCommand(
                                      () =>
                                      {
                                          //?????????
                                      }));
        }
    }

我的问题是在回调Action中,我不想出于测试原因直接从此处调用窗口。

我应该使用消息传递(如果是,那么我应该创建消息接收者,还是有其他选项?)

最佳答案

您可以创建一个WindowService(它直接调用一个窗口),然后将其注入(inject)到 View 模型中。

例如:

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);
                                      }));
        }
    }
}

关于c# - 在ViewModel和Command之间进行通信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14683259/

10-10 22:26