programing

WPF 목록 상자 빈 데이터 템플릿

telecom 2023. 5. 25. 21:32
반응형

WPF 목록 상자 빈 데이터 템플릿

항목이 없는 ListBox 컨트롤을 사람들이 어떻게 처리하는지 궁금합니다. 예를 들어, 검색 결과 목록을 바인딩하고 싶지만 결과가 없으면 "No results found"를 표시하고 싶습니다.

현재 이 문제를 해결하는 방법은 결과 집합 카운트 = 0인 경우 목록 상자를 숨기고 "No results found" 메시지가 있는 레이블을 표시하는 것입니다.이상적으로는 ASP.NET 데이터 그리드가 비어 있으면 좋겠습니다.템플릿 솔루션.

건배.

나는 이 코드로 어느 정도 성공을 거두었습니다.

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

참고로, @Matt Hamilton의 수락된 답변을 기반으로, 저는 바인딩이 필요하지 않은 변형을 만들었습니다.HasItems의 재산.ListBox빈 템플릿을 트리거하려면:

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

이렇게 하면 목록이 바인딩되는 속성 이름을 알 필요 없이 스타일을 전체적으로 사용할 수 있습니다.에 바인딩할 때 유용하다는 것을 알았습니다.CollectionViewSourceXAML에 정의되어 있습니다.

저는 이 방법의 단점을 잘 모릅니다. 의견이 있으시면 환영합니다.

언급URL : https://stackoverflow.com/questions/699881/wpf-listbox-empty-datatemplate

반응형