0

ViewModel に、データ テンプレートによってプロパティが表示されるオブジェクトがあります。この画面には、IsEditingViewModel のフラグを切り替えるボタンもあり、次のように、オブジェクトのプロパティを編集可能にする必要があります。

  • 名前は TextBlock から TextBox に変更する必要があります。
  • 色は、色付きの四角形から色オプション付きの ComboBox に変更する必要があります。
  • カテゴリを TextBlock から ComboBox に変更する必要があります。

Style と DataTrigger を使用してそれらを切り替える 2 つの完全に独立した DataTemplates でこれを実装する方法を知っています。

<ContentControl Content="{Binding FancyObject}">
    <ContentControl.Style>
        <Style TargetType="ContentControl">
            <Setter Property="ContentTemplate" Value="{StaticResource DisplayTemplate}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding DataContext.IsEditing, ElementName=UserControl}" Value="True">
                    <Setter Property="ContentTemplate" Value="{StaticResource EditTemplate}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ContentControl.Style>
</ContentControl>

そして現在、次のDisplayTemplateようになっています。

<DataTemplate x:Key="DisplayTemplate" DataType="my:FancyObject">
    <Border>
        <DockPanel DataContext="{Binding Metadata}">
            <Border>
                <TextBlock Text="{Binding Name}"/>
            </Border>           
            <DataGrid
                AutoGenerateColumns="False"
                ItemsSource="{Binding FancyObjectCollection}">
                <DataGrid.Columns>
                    <!-- Text and Template columns -->
                </DataGrid.Columns>
            </DataGrid> 
        </DockPanel>
    </Border>                   
</DataTemplate>

問題は、2 つの独立しているが類似したテンプレートを使用すると、一部のフィールドのみが変更されるため、レイアウトが重複することになりますが、全体的な構造は同じです。

私が想像する別のオプションは、スタイル内で定義された単一のテンプレートを使用し、トリガーを使用してフィールドを個別に変更することですが、それを行う方法がわかりません。

4

2 に答える 2