ViewModel に、データ テンプレートによってプロパティが表示されるオブジェクトがあります。この画面には、IsEditing
ViewModel のフラグを切り替えるボタンもあり、次のように、オブジェクトのプロパティを編集可能にする必要があります。
- 名前は 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 つの独立しているが類似したテンプレートを使用すると、一部のフィールドのみが変更されるため、レイアウトが重複することになりますが、全体的な構造は同じです。
私が想像する別のオプションは、スタイル内で定義された単一のテンプレートを使用し、トリガーを使用してフィールドを個別に変更することですが、それを行う方法がわかりません。