使用MEF和Prism加载AppSettings和设置ViewModel属性的位置

时间:2014-04-24 16:37:28

标签: wpf xaml mvvm prism mef

我使用MEF和Prism 5.0创建了一个WPF MVVM应用程序。我有MEF在启动时加载一个名为MobileRecruiterModule的模块(下面)。我需要从App.config(或任何配置文件)中读取一些设置,并使用这些配置值更新ViewModel属性,以便View可以选择它们。

在这里加载设置的适当位置在哪里?我是在MEF模块中实现的(实现Microsoft.Practices.Prism.Modularity.IModule还是在我的视图中?

MobileRecruiterModule.cs

[ModuleExport(typeof (MobileRecruiterModule))]
public class MobileRecruiterModule : IModule
{
  /// <summary>
  /// The region manager
  /// </summary>
  [Import] public IRegionManager Region;

  /// <summary>
  ///     Notifies the module that it has be initialized.
  /// </summary>
  public void Initialize()
  {
      Region.RegisterViewWithRegion(RegionNames.MainContentRegion, typeof (MobileRecruiterView));
  }

  ...

}

MobileRecruiterView.xaml.cs

[Export("MobileRecruiterView")]
[PartCreationPolicy(CreationPolicy.Shared)]
[RegionMemberLifetime(KeepAlive = false)]
[Export]
public partial class MobileRecruiterView : UserControl
{
    [Import]
    public MobileRecruiterViewModel ViewModel
    {
        get { return (MobileRecruiterViewModel)DataContext; }
        set { DataContext = value; }
    }

    [ImportingConstructor]
    public MobileRecruiterView(MobileRecruiterViewModel vm)
    {
        InitializeComponent();
        DataContext = vm;
    }
}

MobileRecruiterViewModel.cs

[Export]
public class MobileRecruiterViewModel : BindableBase
{
    public string DatabaseServer { get; set; }

    ... and a few other properties that the XAML view binds to ...
}

1 个答案:

答案 0 :(得分:1)

我建议您在 ViewModel 构造函数中加载设置。由于 ViewModel 视图 DataContext ,因此您必须在显示之前对其进行初始化。我希望你不要在其中存储任何BLOB,因此* .config加载的时间足够小,可以在 UI 线程上进行。