Как передать объект при переходе к новому виду в PRISM 4 - PullRequest
8 голосов
/ 11 апреля 2011

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

Насколько я знаю, в настоящее время PRISM позволяет передавать строки, но не позволяет передавать объекты. Я хотел бы знать, каковы пути преодоления этой проблемы.

Ответы [ 3 ]

7 голосов
/ 11 апреля 2011

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

надеюсь, что это имеет смысл для вас!

3 голосов
/ 14 декабря 2012

Я бы использовал методы OnNavigatedTo и OnNavigatedFrom для передачи объектов с помощью NavigationContext.

Сначала выведите модель представления из интерфейса INavigationAware -

 public class MyViewModel : INavigationAware
 { ...

Затем вы можете реализовать OnNavigatedFrom и установить объект, который вы хотите передать в качестве контекста навигации, следующим образом -

void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
     SharedData data = new SharedData();
     ...
     navigationContext.NavigationService.Region.Context = data;
}

и, если вы хотите получить данные, добавьте следующий фрагмент кода в модель второго представления -

void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
    if (navigationContext.NavigationService.Region.Context != null)
    {
                if (navigationContext.NavigationService.Region.Context is SharedData)
                {
                    SharedData data = (SharedData)navigationContext.NavigationService.Region.Context;
                    ...
                }
    }
}

пс. пометьте это как ответ, если это поможет.

2 голосов
/ 06 мая 2015

PRISM поддерживает параметры поставки:

var para = new NavigationParameters { { "SearchResult", result } };
_regionManager.RequestNavigate(ShellRegions.DockedRight, typeof(UI.SearchResultView).FullName, OnNavigationCompleted, para);

и реализуйте интерфейс INavigationAware в View, ViewModel или в обоих.

Вы также можете найти подробности здесь: https://msdn.microsoft.com/en-us/library/gg430861%28v=pandp.40%29.aspx

...