Silverlight UserControl и его собственная Viewmodel, размещенная в View - PullRequest
1 голос
/ 08 сентября 2010

Я хочу сделать UserControl многократного использования как:

  • ПРОСМОТР со своим собственным VIEWMODEL, где находится логическое восстановление данных
  • Этот UserControl (или View?) Имеет кнопку «ОК» для нацеливания RELAYCOMMAND в своей модели просмотра
  • Я размещаю этот 'UserControl' в другом VIEW ('MainPage'), у которого есть его viewmodel

Мой вопрос:
Как я могу настроить свойства VIEWMODEL моей 'MainPage' на значения, обозначенные моим UC?

1 Ответ

1 голос
/ 08 сентября 2010

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

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

Наконец, если ваша дочерняя модель представления имеет ссылку на модель основного представления, то они смогут общаться по мере необходимости.

Edit:

Я попробую настроить простой пример:

Первые модели просмотра:

public class MainPageViewModel
{

  public MainPageViewModel()
  {
     ChildViewModel = new ChildViewModel(this);
  }

  public ChildViewModel {get; private set; }

  public ICommand OkCommand { get { // return the command here }}
}

public class ChildViewModel
{
  private MainPageViewModel _parentViewModel;
  public ChildViewModel(MainPageViewModel parentViewModel)
  {
    _parentViewModel = parentViewModel;
  }

  // Returns the command from the main page view model
  public ICommand OkCommand { get { return _parentViewModel.OkCommand; } }

  // Other properties as well
}

Здесь у нас есть модель основного вида, которая имеет дочернюю модель вида в качестве свойства. Модель дочернего представления предоставляет OkCommand, которая возвращает значение из модели основного представления.

Теперь на своей главной странице xaml вы можете делать следующее:

<uc:MyUserControl DataContext="{Binding ChildViewModel}" />

Здесь вы вставляете свой пользовательский элемент управления и задаете его контекст данных для модели представления дочернего пользовательского элемента управления.

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