1

小さなレジ係のアプリケーションを作成しています。CashViewModel売上高日付でフィルタリングしています。

ここで、日付でグループ化された売上を(ウィンドウに)表示する履歴ボタンを追加しました。次に、ユーザーが日付を選択すると、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

PrismフレームワークEventAggregatorの実装を使用できます。これにより、送信者や受信者の知識がなくてもイベントを送受信できます。

関連するイベントを受け取ったら、関連するコードを実行するだけでビューを表示できます。

于 2013-02-04T09:17:01.427 に答える
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 に答える