私は単純な MVVM パターンを扱ってきましたが、それ以来、WPF でのデータ バインディングの全機能について詳しく調べてきました。頭を包み込むことができないという問題に遭遇しました。手始めに、次の MainWindowViewModel コードを取り上げます。
ObservableCollection<DataRecord> _SomeData = new ObservableCollection<DataRecord>();
public ObservableCollection<DataRecord> SomeData
{
get
{
return _SomeData;
}
set
{
_SomeData = value;
}
}
public MainWindowViewModel()
{
CurrentViewModel.Add(new RandomViewModel(SomeData));
}
コード全体を貼り付ける代わりに、追加した各ベースの Image プロパティを参照して、ListBox を ViewModelBase の ObservableCollection<> にバインドしました (イメージ ナビゲーション)。今!問題の場合:
ListBox.SelectedItem から返された文字列を使用して、DataTemplate を使用して ViewModel からビューを参照しています。RandomViewModel にはパラメーターを渡す必要があるため、ListBox.SelectedItem をクリックすると、ListBox で作成されたビューではなく、新しいビューがインスタンス化されます。これが発生する理由は単純です。新しいビューでは、データバインディングのために参照するために RandomViewModel が必要です。そう!ViewModel/View Navigation に悪名高い ListBox.SelectedItem を使用して、ViewModel がパラメーターを渡す必要がある場合でも、View を作成し、その ViewModel を参照するにはどうすればよいですか? また!既にインスタンス化された ViewModel を使用し、それを新しく作成されたビューへの参照として使用するにはどうすればよいですか?