を使用しContentControl
てコンテンツをホストし、ContentControl.ContentTemplate
コンテンツの描画方法に基づいて を設定できます。
非常に基本的な例として、
<ContentControl x:Name="MyContentControl">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Style.Triggers>
<DataTrigger Binding="{Binding }" Value="Home">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<local:MyHomeUsercontrol />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding }" Value="Players">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<local:MyPlayersUsercontrol />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding }" Value="Team">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<local:MyTeamUsercontrol />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style>
</ContentControl.Style>
</ContentControl>
そしてMenuItem.Click
MyContentControl.Content = "Home"; // or "Players" or "Team"
この例では に を使用してstring
いますが、やContentControl.Content
などのクラス オブジェクトを使用する場合は、XAML を単純化して暗黙的なデータ テンプレートを使用することができます。これは、WPF が特定のオブジェクトを描画しようとするたびに自動的に使用されるテンプレートです。クラスHomeViewModel
PlayersViewModel
<Window.Resources>
<DataTemplate DataType="{x:Type HomeViewModel}">
<local:MyHomeUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type PlayersViewModel}">
<local:MyPlayersUserControl />
</DataTemplate>
<DataTemplate DataType="{x:Type TeamViewmModel}">
<local:MyTeamUserControl />
</DataTemplate>
</Window.Resources>
<ContentControl x:Name="MyContentControl" />
と
MyContentControl.Content = new HomeViewModel();