gpt4 book ai didi

wpf - Prism - 如何使用 MEF 在 ViewModel 中导入 IRegionManager

转载 作者:行者123 更新时间:2023-12-03 03:27:56 25 4
gpt4 key购买 nike

我们如何使用 MEF 容器在 ViewModel 中注入(inject) IRegionManager。我必须在 ViewModel 的命令委托(delegate)中切换 View 。这是我正在做的事情的简要描述。我有一个名为 Product 的实体,其列表显示在一个 View (ProductListView) 中。在该 View 中,用户可以选择产品并单击“编辑”按钮。这将切换 View 并呈现一个新的 View (ProductEditView)。为了激活不同的 View ,我需要像这样的 IRegionManager 的引用

public class ProductListVM : NotificationObject { //The Product List View Model
[Import]
public IRegionManager RegionManager { get; set; }

private void EditProduct() { //EditCommand fired from ProductListView
IRegion mainContentRegion = RegionManager.Regions["MainRegion"];
//Switch the View in "MainContent" region.
....
}
}

上述代码失败,并出现 RegionManager 的 NullReferenceException。这似乎是合乎逻辑的,因为上面的 View 模型是由 WPF 通过 Xaml 中的 DataContext 属性构建的,并且 DI 没有发挥作用,因此它没有机会导入 RegionManager 实例。在这种情况下我们如何解析IRegionManager。

最佳答案

可以使用以下方法在 Bootstrap 中导出容器实例

    container.ComposeExportedValue<CompositionContainer>(container);

然后在viewmodel中,可以使用代码导入IRegionManager实例

    IServiceLocator serviceLocator = ServiceLocator.Current;
CompositionContainer container = serviceLocator.GetInstance<CompositionContainer>();
RegionManager = container.GetExportedValue<IRegionManager>();

但是,在 ViewModel 中引用 View 违反了 MVVM 模式。但由于我正在关注一篇文章here为了学习 Prism,我也必须相处得一样。另外这篇文章是在 Silverlight 中的,我必须找到一种在 wpf 中导入 RegionManager 的方法,这有点不同。

问候,涅槃。

关于wpf - Prism - 如何使用 MEF 在 ViewModel 中导入 IRegionManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com