Призма: как внедрить экземпляр модели представления в регион? - PullRequest
3 голосов
/ 10 августа 2011

После нескольких недель использования Prism я прошел через все виды методов навигации.Но есть еще одна вещь, которую я не смог достичь с помощью Prism "из коробки": перейти к экземпляру модели представления.На самом деле легко перейти к модели представления или представлению type , но на самом деле нет способа перейти к реальной модели представления instance .

Например,когда у меня есть список разных экземпляров модели представления (и другого типа), если один из них выбран и я хочу отобразить его в своей области содержимого, я не смогу его достичь, если не опубликую изменение с помощью агрегации событий и не хочу, чтобыпотому что это приводит меня к одному виду в моей области контента.Я хочу зарегистрировать экземпляр модели представления в регионе, чтобы представление могло динамически загружаться из шаблонов данных.

На самом деле я достиг этого, создав RegisterViewModelWithRegion в качестве метода расширения RegionManager,это работает хорошо, но это не совсем аккуратно, так как мне приходится вручную просматривать ресурсы своего приложения, загружать представление, прикреплять мой экземпляр модели представления и затем добавлять представление в мой регион.

Я действительно чувствую, что яЯ что-то упускаю в архитектуре, потому что такая практика кажется мне очевидной, но, видимо, я не могу найти никого, имеющего такую ​​же озабоченность.

Ваша помощь и опыт будут высоко оценены.Спасибо.

Ответы [ 2 ]

5 голосов
/ 12 августа 2011

После некоторых обсуждений с командой Prism я обнаружил, что на самом деле, использование метода Region.Add(object view) для внедрения модели вида в регион вполне нормально.Это даст точно такой же результат (за исключением некоторого незначительного случая).

Я проверил ItemsControlRegionAdapter , и все, что он в итоге делает, это

regionTarget.ItemsSource = region.Views;

regionTarget являющийся целевым элементом управления (например, ListBox ) и свойством region.Views, являющимся объектами, которые вы вводите в свои регионы.

Конечно, спасибо за вашу помощь Рэйчел: -)

2 голосов
/ 10 августа 2011

Взгляните на эту статью Я писал об использовании навигации с MVVM

Вам нужна ViewModel для оболочки приложения, которая определяет, какой ViewModel является CurrentPage. Чтобы изменить ViewModels, вы просто запускаете Событие, которое подхватит оболочка, чтобы установить CurrentPage на то, какой ViewModel будет текущим.

Вы можете переключать страницы с чем-то вроде этого с PRISM:

eventAggregator.GetEvent<ChangePageEvent>()
    .Publish(new ChangePageEventArgs(this));

Я уверен, что есть другие способы сделать это, но пока я считаю этот способ самым простым

...