web-dev-qa-db-ja.com

Xamlyは、ListBox.Items.Count> 0かどうかを判断します

リストボックスにデータがあるかどうかを判断する方法はありますかXAMLで

データがない場合は、IsVisibileプロパティをfalseに設定します。

34
Shimmy

ListBoxには、バインドできる HasItems プロパティが含まれています。だからあなたはこれをすることができます:

<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
...
<ListBox 
    Visibility="{Binding HasItems, 
      RelativeSource={RelativeSource Self}, 
      Converter=BooleanToVisibility}" />

または、コンバーターを必要としないトリガーとして:

<ListBox>
  <ListBox.Style>
    <Style TargetType="{x:Type ListBox}">
      <Setter Property="Visibility" Value="Visible" />
      <Style.Triggers>
        <DataTrigger 
            Binding="{Binding HasItems, RelativeSource={RelativeSource Self}}"
            Value="False">
          <Setter Property="Visibility" Value="Hidden" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ListBox.Style>
</ListBox>

私はバインディングをテストしていないので、いくつかのタイプミスがあるかもしれませんが、あなたはその考えを理解する必要があります。

49
Bryan Anderson

トリガーでそれを行うと、ValueConverterは必要ありません。

<ListBox>
  <ListBox.Style>
    <Style TargetType="{x:Type ListBox}">
      <Style.Triggers>
        <DataTrigger 
          Binding="Items.Count, {Binding RelativeSource={RelativeSource Self}}"
          Value="0">
          <Setter Property="Visibility" Value="Hidden" />
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </ListBox.Style>
</ListBox>

つまり、デフォルトではListBoxが表示されますが、Items.Countが0の場合、ListBoxは非表示になります。

14
Matt Hamilton
<ListBox.Style>
    <Style TargetType="ListBox">
        <Setter Property="Visibility" Value="Visible"/>
        <Style.Triggers>
            <Trigger Property="HasItems" Value="False">
                <Setter Property="Visibility" Value="Hidden"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</ListBox.Style>
2
Sathya Ram

おそらく、ValueConverterと通常のバインディングを使用してこれを機能させることができます。

可視性を次のように設定します。

Visibility = "{Binding myListbox.Items.Count, Converter={StaticResource VisibilityConverter}}"

次に、カウントの値に基づいてVisibility.Collapsedなどを返すようにコンバーターを設定します。