gpt4 book ai didi

mvvm - 自己的 DataTemplateSelector MVVM

转载 作者:行者123 更新时间:2023-12-03 10:29:34 27 4
gpt4 key购买 nike

我正在使用带有 ModelView-First 方法的 MVVM 模式。到目前为止,这工作正常。
现在我有一个用户控件( View ),它应该根据位于我的 ViewModel 中的属性显示各种内容。

首先,我尝试使用 DataTemplates 和 DataTemplateSelector ( See this tutorial ) 来解决问题,效果很好。但我对解决方案不满意,因为那时我有一个类(被覆盖的 DataTemplateSelector),它没有连接到 ViewModel 并且无法从模型中填充。

所以我尝试创建一个自己的 TemplateSelector,它使用 ViewModel 中的属性。不幸的是,DataTrigger 没有触发。从 CheckBox 到 ViewModel 的绑定(bind)也可以工作,但不能在 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>

当然,我可以将任务分成两个进一步的内容控件,但如果相同的内容相交,我不想维护它们。
那么有人可以提出任何建议吗?

最好的问候,并提前感谢!

最佳答案

越简单越好:使用单个模板,其中包含您需要显示的所有控件。然后使用绑定(bind)到您的属性来切换它们的可见性:

<UserControl.Resources>
<DataTemplate x:Key="myTemplate">
<Grid>
<Grid Visibility="{Binding IsAdministrator, Converter={StaticResource BooleanToVisibilityConverter}}">
<!-- Content for admin -->
</Grid>
<Grid Visibility="{Binding IsAdministrator, Converter={StaticResource NotBooleanToVisibilityConverter}}">
<!-- Content for user -->
</Grid>
</Grid>
</DataTemplate>
</UserControl.Resources>

<Grid>
<ContentPresenter ContentTemplate="{StaticResource myTemplate}"/>
</Grid>

关于mvvm - 自己的 DataTemplateSelector MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11860251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com