プログラムの閉鎖のビュー(モデル)に通知します
-
10-10-2019 - |
質問
そのため、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で渡します。コマンドが実行された後、シェルを閉じたイベントハンドラーでこの値を検査することができました。このパターンは拡張できます。
所属していません StackOverflow