私はというビューモデルを持っています
ViewModelClass
ブール値が含まれています。
を含む別のビューモデルがあります
ObservableCollection<ViewModelClass> m_allProjects;
それから私は私の見解でこれを持っています:
<DataTemplate>
<views:ProjectInfoView x:Key="ProjectInfoDetailTemplate"/>
</DataTemplate>
<ItemsControl Grid.Row="1" Grid.Column="0"
ItemsSource="{Binding AllProjects}"
ItemTemplate="{StaticResource ProjectInfoDetailTemplate}"
Margin="10,28.977,10,10">
</ItemsControl >
ここで、AllProjectsコレクションのブール値に基づいて、別のデータテンプレートを使用したいと思います。これを行うための最良の方法は何ですか?
さまざまなViewModelでこれを実行し、一種のViewModelベースオブジェクトを使用できることはわかっていますが、1つのビューモデルを使用することを好みます。
編集:
これをデータトリガーで実行したいと思います。誰かが私にいくつかのコードを提供できますか?
私は通常、ContentControl
を使用してデータを表示し、変更されたプロパティに基づいてトリガーでContentTemplate
を交換します。
これが私が投稿した例です 私のブログ バインドされたプロパティに基づいてテンプレートを交換します
<DataTemplate x:Key="PersonTemplate" DataType="{x:Type local:ConsumerViewModel}">
<TextBlock Text="I'm a Person" />
</DataTemplate>
<DataTemplate x:Key="BusinessTemplate" DataType="{x:Type local:ConsumerViewModel}">
<TextBlock Text="I'm a Business" />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ConsumerViewModel}">
<ContentControl Content="{Binding }">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource PersonTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding ConsumerType}" Value="Business">
<Setter Property="ContentTemplate" Value="{StaticResource BusinessTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
</DataTemplate>
DataTemplateSelector
も機能しますが、DataTemplateSelectors
が変更通知に応答しないため、表示するテンプレートを決定するプロパティが変更されない場合に限ります。何が起こっているのかを確認できるように、ビュー内のビュー選択ロジックも優先するため、通常は可能であればそれらを避けます。