Как передать сложный объект между страницами в Silverlight 4 + PRISM - PullRequest
1 голос
/ 23 июня 2011

Я использую Silverlight 4 + PRISM + MVVM в своем приложении. Я хочу передать сложный объект на другую страницу. Я не знаю, как это сделать. Я не могу / не хочу использовать параметры URI.

Ответы [ 3 ]

0 голосов
/ 24 июня 2011

«Проси, чего хочешь» - это путь Единства.Вы можете делиться объектами, зарегистрированными как синглтоны, с любыми другими объектами единства.Просто укажите интерфейс этого общего объекта в конструкторе ваших моделей.

Как уже упоминал Дмитрий Кушниер, вы также можете передавать сложные типы в качестве параметров через EventAggregator.

0 голосов
/ 28 июня 2011

Я реализовал интерфейс INavigationAware и установил сложный объект в navigationContext.NavigationService.Region.Context в методе OnNavigatedFrom (). Теперь на следующей странице я снова реализовал интерфейс INavigationAware, и теперь я проверяю то же значение в OnNavigatedTo (), чтобы получить значение.

Обновление : я отправил ответ с кодом в другом вопросе. Упоминание здесь для справки -

Сначала выведите модель представления из интерфейса 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;
                    ...
                }
    }
}

надеюсь, это поможет вам всем!

0 голосов
/ 24 июня 2011

Может быть EventAggreagtor будет полезно

...