Как я могу поделиться ViewModel между родительскими / дочерними представлениями (Silverlight 3.0)? - PullRequest
1 голос
/ 13 июля 2010

У меня есть родительское представление, привязанное к xaml к модели представления (модель представления объявлена ​​в xaml).

Этот родительский вид может затем отображать дочерний вид (через NavigationService, он же навигация: рамка).

Родительское представление никогда не выходит из области видимости, но я хочу, чтобы новое дочернее представление делило ViewModel родителя.

Как я могу это сделать? Потому что объявление той же модели представления в xaml дочернего представления означало бы, что дочернее представление получает свой собственный экземпляр viewmodel (т.е. это не тот же экземпляр viewmodel, что и его родительское представление).

Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

Звучит как прекрасная возможность либо (а) использовать MEF.Экспортируйте модель представления, затем импортируйте ее как в родительское, так и в дочернее представление.По умолчанию они будут использовать один и тот же объект.Или (b) создайте класс локатора, который отслеживает экземпляры модели представления, предоставляемые через статическое свойство, и используйте это статическое свойство для извлечения модели представления у родителя и потомка:

public static class Locator 
{
   private static readonly MyViewModel _instance = new MyViewModel();

   public static MyViewModel Instance 
   {
      get { return _instance; }
   }
}

public partial class MyView
{
    public MyView()
    {
       InitializeComponent();
       LayoutRoot.DataContext = Locator.Instance;
    }
}
1 голос
/ 13 июля 2010

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

Мое решение по взлому:

ViewModelбудет иметь публичную статическую ссылку на себя.Затем дочерние представления установят свой DataContext в статическую ссылку ViewModel.

Ура.

0 голосов
/ 13 июля 2010

Дочернее представление наследует свой DataContext от родительского представления, нет необходимости объявлять или назначать его повторно.

...