У меня есть Page, который будет получать другую DataContext (модель просмотра) динамически.

Я не могу понять, как использовать DataTemplate в стиле switch/case, чтобы отобразить соответствующее представление на основе текущего контекста.

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

<DataTemplate DataType="{x:Type LocalViewModels:ABC}">
  <LocalViews:ABC/>
 </DataTemplate>

Но не могу понять, в какой контейнер их положить. Одновременно будет отображаться только один из них, поэтому ListBox для меня не имеет смысла.

1
hyankov 8 Янв 2017 в 21:18

1 ответ

Лучший ответ

Учитывая следующий XAML окна

<Window.Resources>
    <DataTemplate DataType="{x:Type local:ABC}">
        <Border BorderThickness="2" BorderBrush="Red">
            <TextBlock Text="{Binding Text}"/>
        </Border>
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ContentControl Content="{Binding}"/>
</StackPanel>

Вы можете просто назначить экземпляр ABC окну DataContext, чтобы создать шаблонное представление.

class ABC
{
    public string Text { get; set; }
}

...
public MainWindow()
{
    InitializeComponent();

    DataContext = new ABC { Text = "Hello, World." };
}

Все подробности здесь: Обзор шаблонов данных .

1
Clemens 8 Янв 2017 в 22:18