无法通过 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 实例化

Ansible Playbook 中的可选变量覆盖

DataTemplates 的动态加载

什么是 ViewModelLocator,与 DataTemplates 相比,它的优缺点是什么?

TabControl 内的 WPF ContentControl 不显示 DataTemplates

使用具有不同模型和 DataTemplates 的分组 ListView