【问题标题】:MEF/Prism Export/Import attributes on propertiesMEF/Prism 导出/导入属性的属性
【发布时间】:2012-09-03 10:36:49
【问题描述】:

情况是这样的

我有 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 返回 2 个公司“A”和“B”。导航到 CompanyViewModel 类时,“A”被设置为选定的公司。然后用户选择公司“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 中的公司属性设置为公司“A”而不是公司“B”,正如我所料,因为我认为 MEF 会导入最后一个值 Selected 设置为(在创建 DepartmentViewModel 之前)而不是第一个值它被设置为。

谁能告诉我到底发生了什么?

【问题讨论】:

    标签: c# mvvm prism mef prism-4


    【解决方案1】:

    我相信您使用的 MEF 不是按照设计的那样。当您尝试使用 MEF 时,它不适用于“绑定”。 MEF 用于创建合成应用程序。

    在您的情况下,问题是 MEF 在创建 CompanyViewModel 后没有更新 SelectedCompany 的部件注册。这就是为什么它总是返回A

    使用另一种方法 - 为每个公司创建单独的 DepartmentViewModel,或根据所选公司进行相应更新。不要为此使用 MEF - 仅将 MEF 用作“在启动期间初始化应用程序一次的容器”。

    PS。实际上,我以前从未见过将Export 属性用于属性。

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多