我正在使用带有 ModelView-First 方法的 MVVM 模式。到目前为止,这工作正常。现在我有一个 UserControl(视图),它应该根据位于我的 ViewModel 中的属性显示各种内容。
首先,我尝试使用 DataTemplates 和 DataTemplateSelector 解决问题(请参阅本教程),效果很好。但我对解决方案不满意,因为那时我有一个类(被覆盖的 DataTemplateSelector),它没有连接到 ViewModel 并且无法从模型中填充。
所以我尝试创建一个自己的 TemplateSelector,它使用 ViewModel 中的一个属性。不幸的是,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>
当然,我可以将任务分成两个进一步的内容控件,但如果相同的内容相交,我不想维护它们。那么有人可以提出任何建议吗?
最好的问候,并提前感谢!