Привязка нескольких ViewModel к Контент Контролю в каждой команде - PullRequest
0 голосов
/ 14 сентября 2010

Я прошел пример элемента управления вкладками для хранения нескольких представлений.Но мое требование немного другое.

Элемент управления контентом должен быть единственным регионом для отображения представлений, и он должен меняться в соответствии с командами, например: Добавить новый, Просмотреть все, Поиск и т. Д.

Заранее спасибо.

Ответы [ 2 ]

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

В вашей ViewModel вы хотите иметь свойство:

private object content;
public object Content
{
  get { return content; }
  set
  {
     this.content = value;
     OnPropertyChanged("Content");
  }
}

Затем в главном окне (или где ваш контент должен быть размещен) добавьте ContentControl:

<ContentControl Content="{Binding Path=Content}"
                HorizontalContentAlignment="Left"
                VerticalContentAlignment="Center"
                Focusable="False"/>

Основной ViewModel будет вести список известных ViewModels (View All, Search) и устанавливать свойство Content для одного из этих ViewModel при соответствующем выполнении команды; команда Add New, вероятно, создаст новый экземпляр AddNewViewModel и установит свойство Content.

В представлении, в котором находится ContentControl, поместите несколько шаблонов данных в ресурсы, отображающие модели представления в соответствующие представления:

<DataTemplate DataType="{x:Type vm:AddNewViewModel}">
  <AdornerDecorator>
    <views:AddNewView DataContext="{Binding}"/>
  </AdornerDecorator>
</DataTemplate>

Это базовый шаблон, который я использую в мастеренад которым я сейчас работаю.

0 голосов
/ 17 сентября 2010

Я использовал ObservableCollection<ViewModelBase>. Затем по каждой команде (AddNew, ViewAll и т. Д.) Я добавил ViewModel в коллекцию. Но я очистил коллекцию, прежде чем добавить ее.

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