私はMVVMライトを使用しており、ViewModelLocatorを使用して任意のビューモデルを取得できるため、それを使用して値を取得できることを理解しました。
私はこのようなことをしてきました
public class ViewModel1
{
public ViewModel1()
{
var vm2 = new ViewModelLocator().ViewModel2;
string name = vm2.Name;
}
}
このようにして、ビュー間を移動する必要がある場合、他の値を簡単に取得できます。これがベストプラクティスになるかどうかはわかりませんが(とても便利なようで、悪い習慣なのかと思います笑)、メッセンジャークラスのものがあることを知っているので、それが私がすべき方法である場合は訴えません。
編集
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<ViewModel1>();
SimpleIoc.Default.Register<ViewModel2>();
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public ViewModel1 ViewModel1
{
get
{
return ServiceLocator.Current.GetInstance<ViewModel1 >();
}
}
編集
これが私が解決しようとしているシナリオです。
価格と店名を追加するビューがあります。店舗名のテキストボックスをクリックすると、別のビューに移動します。このビューには、探しているストアを入力するテキスト ボックスがあり、選択リストを入力すると、そのストアに関するすべての可能な一致と情報が入力されます。
次に、ユーザーは希望する店舗を選択します。それらは「価格を追加」するビューに戻され、店舗名も入力されます。
「追加」ボタンを押すと、価格、店舗名、およびバーコード (これは「価格表示を追加」する前の表示からのもの) を取得し、サーバーに送信します。
ご覧のとおり、さまざまなビューからのデータが必要です。