Создание нескольких экземпляров PRISM-представлений с помощью MEF - PullRequest
2 голосов
/ 07 июля 2011

В моем приложении я хочу создать несколько экземпляров одного и того же представления, используя 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;

Так я называю представление, передавая идентификатор клиента.

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

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

Когда я вызываю представление с помощью ServiceLocator.GetInstance, оно каждый раз открывает новое представление, но я не могу передать идентификатор клиента.

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

Пожалуйста, помогите мне в этом. Что я хочу сделать, так это создать несколько экземпляров одного и того же представления, передавая некоторый идентификатор (например, идентификатор клиента)

1 Ответ

0 голосов
/ 09 сентября 2011

Реализовали ли вы IsNavigationTarget в ViewModel, чтобы он возвращал значение false, если идентификаторы customerID не совпадают?

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

    }
...