如何在目标 ItemsSource 为 null 时在 ComboBox 中显示 “No Items” 内容?

huangapple go评论67阅读模式
英文:

How to display "No Items" content in ComboBox if target ItemsSource is null?

问题

我正在尝试创建一个具有可更新集合的组合框。然后,如果绑定到组合框的集合为空,我想在组合框内显示特定内容。

我已尝试设置TargetNullValue参数,但它显示的内容与我期望的不同。

<ComboBox ItemsSource="{Binding MyCollection, UpdateSourceTrigger=PropertyChanged, TargetNullValue='没有项目'}"/>

我现在拥有的是:

如何在目标 ItemsSource 为 null 时在 ComboBox 中显示 “No Items” 内容?

我期望的是:

如何在目标 ItemsSource 为 null 时在 ComboBox 中显示 “No Items” 内容?

英文:

I am trying to create a Combobox with updatable collection. Than I would to display special content inside combobox if collection which binding to combobox in null.

I had try to set TargetNullValue parameter but it's display content not as I expected.

&lt;ComboBox ItemsSource=&quot;{Binding MyCollection, UpdateSourceTrigger=PropertyChanged, TargetNullValue=&#39;No Items&#39;}&quot;/&gt;

What I Have Now

如何在目标 ItemsSource 为 null 时在 ComboBox 中显示 “No Items” 内容?

What I Expect

如何在目标 ItemsSource 为 null 时在 ComboBox 中显示 “No Items” 内容?

答案1

得分: 2

你可以在 ComboBox 没有项目时替换其模板,例如使用 TextBlock 或任何其他可视元素。

<ComboBox>
    <ComboBox.Style>
        <Style TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="HasItems" Value="False">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ComboBox">
                                <TextBlock Text="No Items"/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>
英文:

You may replace the ComboBox's Template when it has no items, e.g. with a TextBlock or any other visual element.

&lt;ComboBox&gt;
    &lt;ComboBox.Style&gt;
        &lt;Style TargetType=&quot;ComboBox&quot;&gt;
            &lt;Style.Triggers&gt;
                &lt;Trigger Property=&quot;HasItems&quot; Value=&quot;False&quot;&gt;
                    &lt;Setter Property=&quot;Template&quot;&gt;
                        &lt;Setter.Value&gt;
                            &lt;ControlTemplate TargetType=&quot;ComboBox&quot;&gt;
                                &lt;TextBlock Text=&quot;No Items&quot;/&gt;
                            &lt;/ControlTemplate&gt;
                        &lt;/Setter.Value&gt;
                    &lt;/Setter&gt;
                &lt;/Trigger&gt;
            &lt;/Style.Triggers&gt;
        &lt;/Style&gt;
    &lt;/ComboBox.Style&gt;
&lt;/ComboBox&gt;

答案2

得分: 0

尝试这个(我无法自行检查它 - 我手边没有计算机):

&lt;ComboBox&gt;
    &lt;ComboBox.Resources&gt;
        &lt;CompositeCollection x:Key=&quot;noItems&quot;&gt;
            &lt;sys:String&gt;无项目&lt;/sys:String&gt;
        &lt;/CompositeCollection&gt;
    &lt;/ComboBox.Resources&gt;
  
    &lt;ComboBox.Style&gt;
        &lt;Style TargetType=&quot;ComboBox&quot;&gt;
            &lt;Setter Property=&quot;ItemsSource&quot; Value=&quot;{Binding MyCollection}&quot;/&gt;
            &lt;Style.Triggers&gt;
                &lt;DataTrigger Binding=&quot;{Binding MyCollection.Count}&quot;
                             Value=&quot;0&quot;&gt;
                    &lt;Setter Property=&quot;ItemsSource&quot; Value=&quot;{DynamicResource noItems}&quot;/&gt;
                    &lt;Setter Property=&quot;SelectedIndex&quot; Value=&quot;0&quot;/&gt;
                &lt;/DataTrigger&gt;
            &lt;/Style.Triggers&gt;
        &lt;/Style&gt;
    &lt;/ComboBox.Style&gt;
&lt;/ComboBox&gt;

或者对于TargetNullValue的变种:

&lt;ComboBox&gt;
    &lt;ComboBox.ItemsSource&gt;
        &lt;Binding Path=&quot;MyCollection&quot;&gt;
            &lt;Binding.TargetNullValue&gt;
                &lt;CompositeCollection&gt;
                    &lt;sys:String&gt;无项目&lt;/sys:String&gt;
                &lt;/CompositeCollection&gt;
            &lt;/Binding.TargetNullValue&gt;
        &lt;/Binding&gt;
    &lt;/ComboBox.ItemsSource&gt;
&lt;/ComboBox&gt;
英文:

Try this (I can’t check it myself - I don’t have a computer “at hand”):

&lt;ComboBox&gt;
    &lt;ComboBox.Resources&gt;
        &lt;CompositeCollection x:Key=&quot;noItems&quot;&gt;
            &lt;sys:String&gt;No Items&lt;/sys:String&gt;
        &lt;/CompositeCollection&gt;
    &lt;/ComboBox.Resources&gt;
  
    &lt;ComboBox.Style&gt;
        &lt;Style TergetType=&quot;ComboBox&quot;&gt;
            &lt;Setter Property=&quot;ItemsSource&quot; Value=&quot;{Binding MyCollection}&quot;/&gt;
            &lt;Style.Triggers&gt;
                &lt;DataTrigger Binding=&quot;{Binding MyCollection.Count}&quot;
                             Value=&quot;0&quot;&gt;
                    &lt;Setter Property=&quot;ItemsSource&quot; Value=&quot;{DynamicResource noItems}&quot;/&gt;
                    &lt;Setter Property=&quot;SelectedIndex&quot; Value=&quot;0&quot;/&gt;
                &lt;/DataTrigger&gt;
            &lt;/Style.Triggers&gt;
        &lt;/Style&gt;
    &lt;ComboBox.Style&gt;
&lt;/ComboBox&gt;

Or such variant for TargetNullValue:

&lt;ComboBox&gt;
    &lt;ComboBox.ItemsSource&gt;
        &lt;Binding Path=&quot;MyCollection&quot;&gt;
            &lt;Binding.TargetNullValue&gt;
                &lt;CompositeCollection&gt;
                    &lt;sys:String&gt;No Items&lt;/sys:String&gt;
                &lt;/CompositeCollection&gt;
            &lt;/Binding.TargetNullValue&gt;
        &lt;/Binding&gt;
    &lt;/ComboBox.ItemsSource&gt;
&lt;/ComboBox&gt;

huangapple
  • 本文由 发表于 2023年2月6日 17:31:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/75359497.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定