2009-03-31 16 views
47

アイテムを持たないListBoxコントロールをどのように処理するのかと思っていましたか?例えば検索結果のリストをバインドしたいが、結果が見つからない場合は、「結果が見つかりません」と表示したい。WPF listbox空のデータテンプレート

私が現在取り組んでいるのは、結果セット= 0の場合にリストボックスを非表示にし、「結果が見つかりません」というメッセージが表示されたラベルを表示することです。理想的には、ASP .NETのDataGrid EmptyTemplateソリューションのようなものが必要です。私はこのコードのいくつかの成功を持っていた

乾杯

答えて

95

:@Mattハミルトンの受け入れ答えに基づいて

<Style TargetType="ListBox" x:Key="ListStyle" BasedOn="{StaticResource {x:Type ListBox}}"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=Items.Count}" 
      Value="0" 
      > 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <TextBlock>No items to display</TextBlock> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

+1私によく見える、私はある日それを使用する必要があります。 – bendewey

+0

これは非常にうまく動作します。 –

+0

私はデータテンプレートセレクタで変種を見ましたが、これはコードビハインドがなく、素晴らしいです! – levanovd

7

は、参考のために、私はそれとして、結合を必要としないバリエーションを作成しました空のテンプレートをトリガするためにListBoxHasItemsプロパティを使用しています。

<ListBox.Style> 
    <Style x:Key="EmptyListStyle" 
      TargetType="ListBox" 
      BasedOn="{StaticResource {x:Type ListBox}}"> 
     <Style.Triggers> 
      <!-- Use ListBox.HasItems instead of Binding --> 
      <Trigger Property="HasItems" Value="False"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <TextBlock>No items to display</TextBlock> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</ListBox.Style> 

これは、スタイルはしなくても、グローバルに使用することができますリストがバインドするプロパティー名を知っている。 XAMLで定義されているCollectionViewSourceにバインドすると便利です。

私はこの方法の欠点を認識していません。あなたが何かを見つける必要があれば歓迎します。

+0

それは動作しますが、それは私のための問題を提起する。私のリストボックスはドロップ(ドラッグ&ドロップ)を受け付けますが、その 'Template'を設定すると、実際の内容、つまり' TextBlock'の上にマウスを置いたときだけドロップを受け入れなくなります。これをどうすれば解決できますか? – JobaDiniz

+0

ドラッグ・ドロップの動作は 'ListBox'自体ではなく' ListBoxItem'から来る可能性があります。おそらく、 'TextBlock'をコントロールテンプレートの' ListBoxItem'に追加すると、この問題を回避できますか?私は[WPFリファレンスソース](http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ListBox.cs)を見て、[Snoop](https ://snoopwpf.codeplex.com/) –

+0

私は[WPF Inspector](https://wpfinspector.codeplex.com/)を使用していますが、ListBoxItem内にTextBlockを追加しようとしましたが、問題は残ります...水平および垂直にコンテンツを* * center **(テキストはListBoxの中央に表示されます) – JobaDiniz

関連する問題