私はあなたがメッセンジャーを使うべきだと思います。
ここでは、mvvmアーキテクチャのメッセンジャーについての良い記事です。
少し古いですが、それはあなたを助けることができます:https://msdn.microsoft.com/en-us/magazine/jj694937.aspx
ここはあなたのための例です。
は、私が追加しました:たとえば、私は可能性:)すべてのhttp://www.galasoft.ch/mvvm/
まずとして最も簡単であるために、GalasoftからMVVMライトを使用し、私はあなたが放送したいあなたのメッセージに関連するエンティティを作成するためにrecommand単純な文字列プロパティが、明らかにあなたは:)
public class Vm1toVm2Message
{
public String Message { get; set; }
}
は、その後、あなたのVM1にあなたのメッセージを作成し、それを放送したいものは何でも追加することができます。あなたの中
public class ViewModel1 : ViewModelBase
{
private RelayCommand _refreshCommand;
public RelayCommand RefreshCommand
{
get
{
return _refreshCommand ?? (_refreshCommand = new RelayCommand(() =>
{
// You button command code
// -------------------
// Send a message
Messenger.Default.Send<Vm1toVm2Message>(new Vm1toVm2Message { Message = "Update from VM1" });
}));
}
}
}
そして最後にVM2の場合、着信メッセージを待つ:
public class ViewModel2 : ViewModelBase
{
public ViewModel2()
{
Messenger.Default.Register<Vm1toVm2Message>(this, HandleVm1toVm2Message);
}
private void HandleVm1toVm2Message(Vm1toVm2Message msg)
{
// Do what you want here
}
}
ViewModel(1)からViewModel(2)を参照するだけで、コマンドが呼び出されたら、プロパティを変更しますか? – 3615
ビューモデル1では、ビューモデル2のプロパティを更新するアクションを保存できます。ビューモデル1では、アクションを呼び出すことができず、ビューモデル2が変更されます。 –
@ 3615こんにちは、私はちょうどそれを試した。それは期待どおりに動作します。しかし、なぜ私の場所のpplが別のviewModel内に1つのviewModelインスタンスを持たないようにしようとしているのかわかりません。 – DriLLFreAK100