1

我正在创建一个小型收银员应用程序,我的CashViewModel具有按Date过滤的Sales

现在我添加了一个历史按钮来显示按日期分组的销售额(在窗口中),然后当用户选择一个日期时,我的Date属性发生了变化,所以我将该按钮绑定到了 RelayCommand。

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

我的问题在回调操作内部,出于测试原因,我不想直接从这里调用窗口。

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

4

3 回答 3

3

您可以创建一个 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);
                                      }));
        }
    }
}
于 2013-02-04T08:56:39.887 回答
0

您可以在那里给出函数名称。

private ICommand _historyCommand;
public ICommand HistoryCommand
{
    get { return _historyCommand?? (_historyCommand= new RelayCommand(MyFunction)); }
}


private void MyFunction()
{
     // Function do something.
}
于 2013-02-04T08:59:25.520 回答
0

您可以使用Prism 框架EventAggregator的实现。它使您能够在不了解发送者和/或接收者的情况下发送和接收事件。

当您收到相关事件时,您只需执行相关代码即可显示视图。

于 2013-02-04T09:17:01.427 回答