使用MEF创建PRISM视图的多个实例

时间:2011-07-07 08:25:39

标签: mvvm prism

在我的应用程序中,我想使用PRISM / MEF

创建同一视图的多个实例

我的视图和视图模型都使PartCreationPolicy不共享,但它不会创建多个视图。相反,它会更改已打开视图中的内容。

客户视图的顶部

[ViewExport("CustomerView")]
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class CustomerView : UserControl
{
    public CustomerView()
    {
        InitializeComponent();

    }

CustomerViewModel的顶部

//[Export(typeof(CustomerViewModel))]
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class CustomerViewModel : NotificationObject, INavigationAware
{
    private ICustomerRepository _custRepository;

这就是我通过客户ID调用视图的方式。

        UriQuery parameters = new UriQuery();
        parameters.Add("CustomerID", CurrentItem.CustomerID.ToString());

        _regionManager.RequestNavigate(RegionNames.MainRegion,
                                        new Uri("CustomerView" + parameters.ToString(), UriKind.Relative),
                                        NavigationCompleted);

当我使用ServiceLocator.GetInstance调用视图时,它每次都会打开一个新视图,但我无法传递客户ID。

         _regionManager.Regions[RegionNames.MainRegion].Add(_serviceLocator.GetInstance<CustomerView>());

请帮我解决这个问题。我真正想做的是创建多个相同视图的实例,传递一些ID(例如客户ID)

1 个答案:

答案 0 :(得分:0)

您是否在ViewModel上实现了IsNavigationTarget,以便在customerID不匹配时返回false?

    public bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return navigationContext.Parameters["CustomerID"] == this.CustomerID.ToString();

    }