0

いくつかのボタンを表示し、選択したボタンに応じてビューポートを変更するアプリの作成に興味があります。私のアプリのビューポートはContentControl、ボタンがクリックされるたびにコンテンツを変更することを考えました。ただし、提示したい各ビューのViewModelを注入し、ContentControlそれらを使用してスタイルを設定することにより、より良いアプローチがあると思いますDataTemplates(多くのコントロールを持つグリッドを避け、必要なVisibilityときにいつでもそれらのプロパティを設定するだけであるため)特定のビューを表示します)。どちらのアプローチがあなたにとってより良いと思われますか? これには別のアプローチがありますか?

ビューは次のようになります。 一般的なアプリケーションの UI デザイン

ありがとう!

4

1 に答える 1

2

通常、以下を含むウィンドウの背後に ViewModel があります。

  • ObservableCollection<IViewModel> AvailableViewModels
  • IViewModel SelectedViewModel
  • ICommand SetCurrentViewModelCommand

に設定されているAvailableViewModelsを使用してを表示します。はにバインドされ、現在のデータ項目をコレクションから に渡します。ItemsControlItemTemplateButtonButton.CommandSetCurrentViewModelCommandAvailableViewModelsCommandParameter

コンテンツ領域を表示するには、ContentControlwith を にContentControl.Contentバインドして使用しSelectedViewModelDataTemplates各 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>

私のブログで、このようなセットアップに使用される完全なコードの例を見ることができます

于 2013-01-30T14:03:57.643 に答える