ModelView-First アプローチで MVVM-Pattern を使用しています。これまでのところ、これはうまく機能します。これで、ViewModel にあるプロパティに応じてさまざまなコンテンツを表示する UserControl (ビュー) ができました。
まず、DataTemplates と DataTemplateSelector を使用して問題を解決しようとしました (このチュートリアルを参照してください)。これは非常にうまく機能していました。しかし、ViewModel に接続されておらず、モデルから入力できないクラス (オーバーライドされた DataTemplateSelector) があるため、このソリューションには満足できませんでした。
そこで、ViewModel のプロパティを使用する独自の TemplateSelector を作成しようとしました。残念ながら、DataTrigger はトリガーしていません。CheckBox から ViewModel へのバインドも機能していますが、DataTrigger では機能していません (デザイナーでさえこのパスを見つけることができません)。
わかりました、コードを見てください:
<UserControl.Resources>
<!--Define Template which is displayed for Users-->
<DataTemplate x:Key="templateUser">
<Image
Name="logo"
Source="blanked out"
HorizontalAlignment="Center"
VerticalAlignment="Center" />
</DataTemplate>
<!--Define Template which is displayed for Administrators-->
<DataTemplate x:Key="templateAdmin">
<TextBlock Background="Yellow" Margin="3" Text="YEAH, I'm an Administrator" />
</DataTemplate>
<!--My own TemplateSelectpr-->
<DataTemplate x:Key="myTemplateSelector">
<ContentControl x:Name="DynamicContent" ContentTemplate="{StaticResource templateUser}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=IsAdministrator}" Value="true">
<Setter TargetName="DynamicContent" Property="ContentTemplate" Value="{StaticResource templateAdmin}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</UserControl.Resources>
<Grid>
<ContentPresenter ContentTemplate="{StaticResource myTemplateSelector}"/>
</Grid>
もちろん、さらに 2 つのコンテンツ コントロールでタスクを分離することはできますが、同じコンテンツが交差している場合はそれらを維持したくありません。それで、誰かが何か提案できますか?
よろしくお願いします!