Передача модели между представлениями Silverlight - PullRequest
0 голосов
/ 22 сентября 2011

Поскольку базовый механизм навигации в Silverlight позволяет передавать только аргументы в строке запроса, когда мы хотим передавать сложные данные (например, модели) между нашими представлениями, мы используем механизм pubvent \ sub \ IE.

Но вопрос в том, есть ли лучший способ передавать сложную информацию между представлениями?
Каковы преимущества использования IEventAggregator для этого?

Ответы [ 3 ]

1 голос
/ 22 сентября 2011

Вот почему я переключился на ViewModel первый подход.Представления на самом деле не являются настраиваемыми, и при этом они не должны передавать модели представления вокруг.Для меня было гораздо больше смысла для ViewModel загружать другую ViewModel, такую ​​как:

Show.Screen<OrderDetailsViewModel>(vm => vm.OrderId = orderId);

Это из Создайте свой собственный фреймворк mvvm talk и также похоже на то, как Caliburn Micro работает.

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

В настоящее время я использую идею сеанса, как в ASP.NET.Я определил статический объект с именем SilverlightSession и добавил свойство Values ​​типа Dictionary.Затем я просто добавляю в словарь значений или обновляю его и приводю

public static class SilverlightSession
{
  public static Dictionary<string, object> Values { get; private set; }
}

в запуске app.xaml.cs:

SilverlightSession.Values = new Dictionary<string, object>();

Тогда вы можете включить ваши модели в "сеанс""пока приложение не закроется.

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

Я не могу сказать вам, почему IEventAggregator плох, может, он не такой интуитивно понятный?Когда вы смотрите на свое приложение - вы хотите увидеть, что происходит, и что события с некоторыми данными не кажутся хорошими.Событие есть событие.Вы можете поделиться некоторыми данными через контекст региона в PRISM.

Я решаю такие же проблемы, используя MEF.Таким образом, вы можете определить что-то вроде

[Export]
public class MyModelService
{
    // Code here whatever shared data you want
}

public class MyViewModel
{
    // Import this shared ModelService
    [Import]
    public MyModelService ModelService
}

Итак, если у вас есть некоторые данные в ModelService - по умолчанию MEF будет составлять их только один раз (эффективно делая их общими) и каждый раз, когда вы импортируете их в ViewModel, этот экземплярБудет здесь.Затем вы можете использовать События, происходящие из ModelService, чтобы сообщать компонентам об обновлении данных и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...