質問

そのため、PRISM/MVVM/MEFプログラムがうまく実行されているため、ユーザーはアプリケーションにデータを入力してから、アプリケーションを閉じます(またはコンピューターをシャットダウンします)。

プログラムの閉鎖 /コンピューターのシャットダウンについて通知(モデル)に通知するにはどうすればよいですか?ユーザーデータを保存するか、これらを保存する必要があるかどうかを尋ねることができますか?

プログラムの近くでデータを失うことは間違いなく避けるべきものであり、ユーザーのすべてのキープレスに物を保存することは意味がありません。

役に立ちましたか?

解決

私は、クライアントが興味深いグローバルな「イベント」に登録できるCompositeCommandsを公開します。

public static class HostCommands
{
    private static readonly CompositeCommand Shutdown = new CompositeCommand();

    public static CompositeCommand ShutdownCommand
    {
        get { return Shutdown; }
    }
}

シェルのシャットダウンコマンドをトリガーします。

public Shell()
{
    InitializeComponent();

    Closing += (sender, e) =>
    {
        if (HostCommands.ShutdownCommand.CanExecute(e))
            HostCommands.ShutdownCommand.Execute(e);
    };
}

クライアントは次のように登録できます

public SomeViewModel(IEventAggregator eventService)
{
    //blah, blah, blah...

    HostCommands.ShutdownCommand.
        RegisterCommand(new DelegateCommand<object>(_ => Save()));
}

アップデート

キャンセルシナリオは処理しませんが、コマンドに渡されるオブジェクトを介してこれを実装できます。たとえば、上記のコードでは、Cancel = trueを設定してクライアントがIEを操作できるCancelEventargsで渡します。コマンドが実行された後、シェルを閉じたイベントハンドラーでこの値を検査することができました。このパターンは拡張できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top