MVVM Foundation:ViewModelからアプリケーションウィンドウを閉じる方法

StackOverflow https://stackoverflow.com/questions/3791677

  •  05-10-2019
  •  | 
  •  

質問

使ってます MVVM Foundation しかし、私はそれが非常に簡単であり、実際にはフレームワークに固有ではないと思います。私のセットアップは次のとおりです。

  • startViewModel-リレーコマンド/icommandを返すexitcommandがあります

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • StartView(ユーザーコントロール)には、exitcommandにバインドされたボタンがあります

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
役に立ちましたか?

解決

まず、MVVMでお腹を空けることができる限り読んでください。 Model-View-ViewModelデザインパターンを備えたWPFアプリ MSDNで。それを推進する基本原則を理解すると、答えはより合理的に思えます。

基本的に、あなたはあなたのビュー(UI)とViewModel(本質的に抽象的なUIだけでなく、抽象モデル)レイヤーを維持したい 分ける そして分離されました。メッセージボックスを表示したり、ウィンドウを閉じたりすることは、UI固有の詳細と見なされるため、ビューに実装される必要があります。または、より一般的には「サービス」を介して利用可能なメッセージボックスの場合に実装する必要があります。

ViewModelに関して、これは 制御の反転 (IOC)。上記のメッセージボックスの例を取ります。メッセージボックス自体を表示するのではなく、showメソッドを備えたimessageboxserviceと、代わりに責任を委任するViewmodelコールに依存します。これは、活用によってさらに取られる可能性があります 依存関係インジェクション (DI)コンテナ。

ビューウィンドウを閉じるために使用される別のアプローチは、ViewModelが(MSDN記事のように)requestCloseと呼ばれるイベントを公開することです。その後、ViewModelは、対応するビュー /ウィンドウを閉じる必要がある場合にイベントを上げます。それは他の何かが聞いていると想定しており、責任を負い、実際にそれを行います。

他のヒント

StartViewModelにCloseEventを実装できます。 StartViewでは、このCloseEventを登録する必要があります。 VMから近接しているとき、あなたの見解は、それがあなたのアプリ/ウィンドウを閉じる必要があることを認識します。

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