2009-03-31 2 views
47

사람들이 항목이없는 ListBox 컨트롤을 어떻게 처리하는지 궁금합니다. 예 : 검색 결과 목록을 바인딩하고 싶지만 결과가 없으면 "결과를 찾을 수 없음"을 표시하고 싶습니다.WPF listbox empty datatemplate

내가 현재 다루는 방법은 결과 집합 개수 = 0이고 "결과를 찾을 수 없음"메시지와 함께 레이블을 표시하면 목록 상자를 숨기는 것입니다. 이상 적으로 나는 ASP .NET DataGrid EmptyTemplate 솔루션과 같은 것을 원할 것이다. 그것으로, @ 매트 해밀턴의 허용 대답을 바탕으로

<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> 

답변

95

는이 코드에 약간의 성공을 했어 로하지 않고,이 스타일이 전 세계적으로 사용할 수 있습니다

<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> 

: 빈 템플릿을 트리거 할 ListBoxHasItems 속성을 사용하여 리스트가 바인드되는 프롭퍼티 명을 인식합니다. XAML에 정의 된 CollectionViewSource에 바인딩 할 때 유용하다는 것을 알았습니다.

나는이 방법의 단점을 알고 있지 않다. 찾을 것이면 환영 받는다.

+0

+1은 나에게 잘 어울리는데, 나는 언젠가 그것을 사용해야 할 수도 있습니다. – bendewey

+0

아주 잘 작동합니다. –

+0

데이터 템플릿 선택자가있는 변형을 보았습니다.하지만이 템플릿은 코드 숨김없이 훌륭합니다! – levanovd

7

은 참조를 위해, 나는 바인딩을 필요로하지 않는 변화를 만들어 :

건배

+0

그것은 작동하지만, 그것은 나를 위해 문제를 일으킨다. 내 목록 상자는 끌어다 놓을 수 있지만 (드래그 앤 드롭), '템플릿'을 설정하면 더 이상 드롭을 허용 할 수 없습니다. 실제 내용 위에 마우스를 놓았을 때만, 즉 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