我可以将 WPF ComboBox 控件的可见性绑定到从命令获得的项目的存在/不存在吗? [关闭]

Posted

技术标签:

【中文标题】我可以将 WPF ComboBox 控件的可见性绑定到从命令获得的项目的存在/不存在吗? [关闭]【英文标题】:Can I bind the visibility of a WPF ComboBox control to the presence/absence of items obtained from a Command? [closed] 【发布时间】:2021-09-16 07:00:03 【问题描述】:

我能否将 WPF ComboBox 控件的可见性绑定到从填充ComboBoxItemsSource 属性的Command 获得的项目的存在/不存在?简而言之,在这样的情况下:

<ComboBox ItemsSource="Binding MyCommand.Result, Mode=OneWay" Visibility="..." />

我可以将Visibility 属性的值绑定到MyCommand.Result 中是否存在项目以相应地隐藏/显示它吗?

【问题讨论】:

是的,使用 IValueConverter 你的意思是if ItemsSource == null; comboBox.hide() 等价物吗? @LeiYang 是的。我的问题是,当我调试时,在代码隐藏中我得到 0 作为ComboBox.ItemsCount 属性。 您已经说过 bind 这个词,但您似乎尝试以代码隐藏的方式进行操作。另外,我很少看到MyCommand.Result,你在哪里看到这样的模式和任何好处? @LeiYang 这是我公司前段时间写的代码…… 【参考方案1】:

您可以将Style 与绑定到源属性的DataTrigger 一起使用,例如:

<ComboBox ItemsSource="Binding MyCommand.Result, Mode=OneWay">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <DataTrigger Binding="Binding MyCommand.Result.Count" Value="0">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

或者您可以绑定到控件本身的HasItems 属性:

<ComboBox ItemsSource="Binding MyCommand.Result, Mode=OneWay">
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Visibility" Value="Collapsed" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

【讨论】:

ComBox 保持不变,不会消失。 使用什么代码截图?试试第二个?如果第一个失败,则说明您的绑定有问题。第二个应该无论如何都可以工作。它对我有用。

以上是关于我可以将 WPF ComboBox 控件的可见性绑定到从命令获得的项目的存在/不存在吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

WPF——ComboBox控件怎么绑定数据

WPF 控件功能重写(ComboBox回车搜索)

WPF 控件功能重写(Combobox回车搜索)

如何从 MaterialDesignXamlToolkit 中删除 ComboBox 控件中的装饰器可见性?

Wpf combobox 控件响应时间

wpf 自定义控件combobox 依赖属性