无法通过 DataTemplates 设置控制的可见性
Posted
技术标签:
【中文标题】无法通过 DataTemplates 设置控制的可见性【英文标题】:Having trouble setting visibility of control through DataTemplates 【发布时间】:2014-02-24 13:09:49 【问题描述】:因此,我正在构建一个具有不同用户帐户的订单跟踪应用程序,其中一些用户的需要了解的信息比其他用户少。这意味着某些控件对某些帐户显示,而对其他帐户隐藏。
Window 的数据上下文设置为我的 Order 类,并且文本字段中的数据绑定在显示特定 Order 的属性方面工作得很好。但是,我制作的 DataTemplates 和 Triggers 似乎根本没有做任何事情,我也不完全确定为什么。我浏览了整个网络,但似乎找不到它为什么不起作用。这是 XAML:
<Label Name="StatusLabelText" Content="Status:" FontSize="15" DockPanel.Dock="Top">
<Label.Resources>
<DataTemplate DataType="x:Type local:Order">
<DataTemplate.Triggers>
<DataTrigger Binding="Binding Path=selectedAccount" Value="Color Correct">
<Setter Property="Visibility" Value="Hidden"></Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</Label.Resources>
</Label>
【问题讨论】:
难道selectedAccount
应该是SelectedAccount
?通常人们将财产资本化,这可能是一个错字。再说一次,它可能是对的:)
你看到 Get 调用了吗?我会有一个布尔和可见性转换器。
一个更简单的 XAML。两个 XAML 很难调试。三把业务逻辑放在code后面。
【参考方案1】:
如果selectedAccount
的值为Color Correct
,我怀疑你想hide label
。
如果我的假设是正确的,您需要 Style 而不是模板,可以这样做:
<Label Name="StatusLabelText" Content="Status:" FontSize="15"
DockPanel.Dock="Top">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="Binding Path=selectedAccount"
Value="Color Correct">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
附带说明,您应该使用Collapsed
而不是Hidden
来设置控件的可见性,以防您不希望标签采用该尺寸,即使它在GUI 上不可见。阅读更多关于它的信息here。
【讨论】:
奇怪的是,我实际上在几分钟前就以我通常的方式找出了这个确切的代码 - 谷歌搜索和敲打我的头来解决问题直到它给出的一些组合。 Collapsed 的好点 - 不知道为什么我忽略了这一点。非常感谢您的宝贵时间。以上是关于无法通过 DataTemplates 设置控制的可见性的主要内容,如果未能解决你的问题,请参考以下文章
WPF 用户控件不呈现。 UserControl 使用 DataTemplates 实例化
什么是 ViewModelLocator,与 DataTemplates 相比,它的优缺点是什么?