通常、以下を含むウィンドウの背後に ViewModel があります。
ObservableCollection<IViewModel> AvailableViewModels
IViewModel SelectedViewModel
ICommand SetCurrentViewModelCommand
に設定されているAvailableViewModels
を使用してを表示します。はにバインドされ、現在のデータ項目をコレクションから に渡します。ItemsControl
ItemTemplate
Button
Button.Command
SetCurrentViewModelCommand
AvailableViewModels
CommandParameter
コンテンツ領域を表示するには、ContentControl
with を にContentControl.Content
バインドして使用しSelectedViewModel
、DataTemplates
各 ViewModel のレンダリング方法を WPF に指示することに慣れています。
最終結果は、私の XAML が次のようになります。
<Window.Resources>
<DataTemplate DataType="{x:Type local:ViewModelA}">
<local:ViewA />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ViewModelB}">
<local:ViewB />
</DataTemplate>
</Window.Resources>
<DockPanel>
<Border DockPanel.Dock="Left" BorderBrush="Black" BorderThickness="0,0,1,0">
<ItemsControl ItemsSource="{Binding AvailableViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}"
Command="{Binding DataContext.SetCurrentViewModelCommand, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
CommandParameter="{Binding }"
Margin="2,5"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<ContentControl Content="{Binding SelectedViewModel}" />
</DockPanel>
私のブログで、このようなセットアップに使用される完全なコードの例を見ることができます