Как связать универсальное окно с произвольной моделью представления во время выполнения, используя DataTemplates? - PullRequest
1 голос
/ 29 июля 2010

У меня большое количество классов ViewModel.Для каждого из этих классов существует соответствующий файл .xaml, который является 'UserControl'.В моем App.xaml я зарегистрировал их как DataTemplates, например:

<DataTemplate DataType="{x:Type viewModel:MainMenuViewModel}">
     <view:MainMenuView/>
</DataTemplate>

При том, что WPF сможет автоматически заменять необходимые пользовательские элементы управления во время выполнения.Например, это работает:

 <Grid>
    <StackPanel>
    <TextBlock Text="SuperApp" />
        <ItemsControl>
            <ViewModels:MainMenuViewModel/>
        </ItemsControl>
   </StackPanel>
</Grid>

При этом запись «MainMenuViewModel» автоматически заменяется на MainMenuView, привязанную к MainMenuViewModel.Отлично.Моя текущая цель теперь такова: я хочу иметь кнопку, скажем, для представления, встроенного в MainMenuView, которое открывает всплывающее окно, в котором будет новая ViewModel.Идея состоит в том, чтобы настроить его так, чтобы у меня была единственная «универсальная» всплывающая форма, в которую я вставил произвольную ViewModel, и позволил WPF обрабатывать его фактическое отображение с помощью DataTemplates, как описано выше.Итак, у меня есть команда, привязанная к кнопке, например:

<Button Command="{Binding Path=LaunchInStandaloneForm}" Content="Rip Out"/>

, которая успешно создает новое окно, устанавливает dataContext равным соответствующему ViewModel и показывает окно.

Вопрос заключается в следующем: как настроить XAML этого всплывающего окна, чтобы он отображал соответствующий DataTemplate для ViewModel, который является DataContext?Я пробовал:

 <Grid>
    <ItemsControl ItemsSource="{Binding Path=.}">

    </ItemsControl>
</Grid>

, но ничего не получается.Есть указатели?

Ответы [ 2 ]

1 голос
/ 29 июля 2010

Чтобы установить ItemsSource на DataContext, используйте ItemsSource={Binding}. Это предполагает, что DataContext является перечисляемой коллекцией ваших объектов View Model.

Обновление с правильным ответом:

Используйте ContentControl:)

Надеюсь, это поможет.

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

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

Как изменить отображение данных комбинированного списка Silverlight

Надеюсь, что поможет

...