ViewModelLocator の概念を理解しようとしています (MVVM Light では、どの MVVM フレームワークが使用されているかに関係なく、ViewModelLocator の一般的な概念に問題が適用されます)。それを使用する。
私が理解しているように、ビューはロケーターのシングルトン インスタンスのプロパティの 1 つをデータ コンテキストとして使用します。ロケーターはこれらのさまざまなプロパティを定義し、それぞれに適切なビューモデル インスタンスを返します。
それはすべて問題ありませんが、これらのビューモデルに、ビューが提示するはずのモデルデータを実際にどのように入力するかを理解するのに苦労しています.
たとえば、従業員のリストを表示するビューがあるとします。EmployeesView と EmployeesViewModel を作成できます。ViewModelLocator で、この EmployeesViewModel を返すプロパティを作成できます。
public EmployeesViewModel Employees
{
get
{
return ServiceLocator.Current.GetInstance<EmployeesViewModel>();
}
}
ここで、viewmodel には従業員のリストが必要なので、すべての従業員を返す何らかのデータサービスを作成し、それを ViewModelLocator のコンストラクターの Servicelocator に登録します。
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<IDataService, AllEmployeesDataService>();
}
EmployeesView をインスタンス化すると、EmployeesViewModel がインスタンス化され、すべての従業員を返すデータサービスが挿入されます。
ただし、EmployeesView でクリックしたばかりの特定の従業員の詳細を表示したいと考えています。この従業員はおそらく、データベースなどから取得するための何らかの ID を持っています。
EmployeeDetailsView と EmployeeDetailsViewModel を作成し、ViewModelLocator にプロパティを追加できます。
public EmployeeDetailsViewModel EmployeeDetails
{
return ServiceLocator.Current.GetInstance<EmployeeDetailsViewModel>();
}
そしておそらく、ViewModelLocator のコンストラクターにある種のデータサービスを登録します。
SimpleIoc.Default.Register<IDataService, EmployeeDetailsDataService>();
しかし、どの従業員の詳細を表示する必要があるかをデータサービスまたはビューモデルに伝えるにはどうすればよいでしょうか? 従業員 ID はどこに渡すのですか?
私はこれをすべて間違って見ていますか?何か良い例を知っている人はいますか?私が見つけることができるすべての例は、各ビューモデルの同じ単一のインスタンスを返すだけです。