これが状況です
2つのシングルトンクラスがあります(実際にはViewModels)。
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class CompanyViewModel, INavigationAware
{
private Model.Company _selected;
[ImportingConstructor]
public CompanyViewModel(Service.ICompany companyService)
{
Companies = companyService.Companies;
}
[Export("SelectedCompany")]
public Model.Company Selected
{
get
{
return _selected;
}
set
{
_selected = value;
}
}
public ObservableCollection<Model.Company> Companies{get;set;}
public void OnNavigatedTo(NavigationContext navigationContext)
{
_selected = Companies.First();
}
~~~
}
companyServiceは、「A」と「B」の2つの会社で戻ります。「A」は、CompanyViewModelクラスに移動したときに選択された会社として設定されます。次に、ユーザーは会社「B」を選択し、CompanyViewModelはそのバインディングを介して更新されます。
[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class DepartmentViewModel, INavigationAware
{
[Import("SelectedCompany")]
private Model.Company _selectedCompany{get;set;};
[ImportingConstructor]
public DepartmentViewModel(Service.IDeparment departmentService)
{
Departments= departmentService.Departments;
}
public ObservableCollection<Model.Department> Departments{get;set;}
public void OnNavigatedTo(NavigationContext navigationContext)
{
this.departmentService.Refresh(_selectedCompany);
}
~~~
}
上記のイベントの後、DepartmentViewModelが作成されます。問題は、DepartmentViewModelの会社のプロパティが、予想どおり会社「B」ではなく会社「A」に設定されていることです。これは、MEFが最初の値ではなく(DepartmentViewModelの作成前に)最後の値をインポートすると思ったためです。に設定されました。
誰かが実際に何が起こっているのか教えてもらえますか?