2016-12-02 8 views
0

ViewModelを手動で再起動する方法を少し見ていましたが、実際に欲しいものに向かっているかどうかはわかりませんでした。ViewModel内で特定のメソッドを手動で実行する

私がしたいことは、特定のウィンドウが閉じられたときに、それらのすべてを実行せずに、自分のViewModelの中にある特定のメソッドを実行できることです。このメソッドを2番目のウィンドウのクローズイベントにバインドする方法はありますか?ありがとう。

+0

したがって、2番目のウィンドウにもビューモデルがあります。だからあなたはそれぞれのウィンドウのビューモデルを持っていますか? – FCin

+0

私はしません。私はメインウィンドウ用のウィンドウしか持っていませんが、2番目のウィンドウ内で行われたデータベースへの変更がメインウィンドウに反映されるように、そのViewModel内にある特定のメソッドをトリガすることができます。 – RockGuitarist1

+0

そして、そのウィンドウをどこで作成しますか?あなたはviewmodelの中でそれを作成しますか?そのウィンドウへの参照はありますか? mvvmが提供しなければならないものを実際に手に入れるために、私は2番目のウィンドウのビューモデルを作成し、それをイベントにバインドします。それ以外の場合は、コードの後ろに残っているとイベント – FCin

答えて

1

あなたはMVVMに固執したいとあなたはこのようにこれを行うことができます簡単に拡張し、維持する方法で、適切にそれを行う場合:

public class FirstViewModel : IWindowCloseNotifier { 

    public SecondViewModel SecondVm { get; set; } 

    public FirstViewModel() 
    { 
     SecondVm = new SecondViewModel(this); 
    } 

    public void Close(IWindowCloseNotifierArgs args) 
    { 
     // Window is now closed! 
    } 
} 

インタフェースはSecondViewModelだけCloseメソッドを使用できるようになります。

public interface IWindowCloseNotifier { 
     void Close(IWindowClosedArgs args); 
    } 

    public class SecondViewModel { 

     private readonly IWindowCloseNotifier _windowCloseNotifier; 

     public SecondViewModel(IWindowCloseNotifier windowCloseNotifier) { 
      _windowCloseNotifier = windowCloseNotifier; 
     } 

     public void OnClose() 
     { 
      _windowCloser.Close(your args); 
     } 
    } 

あなたSecondViewModelはのviewmodels間で通信するためにパターンを購読公開使用し、その後FirstViewModelの子でない場合。

私の命名は素晴らしいものではありませんが、私は他のアイデアはありません。

0

MVVM Lightまたは他のMVVMフレームワークを使用していますか?

もしそうなら:あなたは、あなたのデザインに応じて複数のオプションを持っているあなたは

  1. EventToCommand
  2. メッセンジャー(私はこのルートが行動を作成し、そのきれいなので、そこにロジックを続ける行けば)
  3. を選択することもできます
関連する問題