ListBox와 ListView의 차이점은 무엇입니까


200

WPF의 ListBox와 ListView의 차이점은 무엇입니까? 나는 그들의 속성에서 큰 차이를 찾을 수 없습니다. 다른 일반적인 용도가 있습니까?

답변:


213

A ListView는 기본적으로 a ListBox와 비슷 하지만 그로부터 상속받습니다 View. 이 속성을 사용하면 미리 정의 된 항목 표시 방법을 지정할 수 있습니다. BCL ( 기본 클래스 라이브러리 ) 에서 사전 정의 된 유일한보기는 자신 만의보기를GridView 쉽게 만들 수 있습니다 .

또 다른 차이점은 기본 선택 모드입니다 : 그것은 SingleA에 대한 ListBox,하지만 ExtendedA에 대한ListView


33

A는 ListView당신이 세트 정의 할 수 views그것을 위해 그리고 당신에게 기본 방법 (제공 WPF binding의 표시 제어 지원) ListView정의를 사용하여을 views.

예:

XAML

<ListView ItemsSource="{Binding list}" Name="listv" MouseEnter="listv_MouseEnter" MouseLeave="listv_MouseLeave">
        <ListView.Resources>
            <GridView x:Key="one">
                <GridViewColumn Header="ID" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding id}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding name}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
            <GridView x:Key="two">                    
                <GridViewColumn Header="Name" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding name}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.Resources>
        <ListView.Style>
            <Style TargetType="ListView">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ViewType}" Value="1">
                        <Setter Property="View" Value="{StaticResource one}" />
                    </DataTrigger>
                </Style.Triggers>
                <Setter Property="View" Value="{StaticResource two}" />
            </Style>
        </ListView.Style>  

Code Behind:

private int viewType;

public int ViewType
{
    get { return viewType; }
    set 
    { 
        viewType = value;
        UpdateProperty("ViewType");
    }
}        

private void listv_MouseEnter(object sender, MouseEventArgs e)
{
    ViewType = 1;
}

private void listv_MouseLeave(object sender, MouseEventArgs e)
{
    ViewType = 2;
}

산출:

일반보기 : 위의보기 2 XAML

표준

MouseOver보기 : 위의보기 1 XAML

마우스 오버

에서 위의 내용을 달성하려고하면 / / 에 ListBox대해 더 많은 코드를 작성하게 될 것 입니다 .ControlTempalateItemTemplateListBox


코드 숨김 섹션은 2019-04-29 (추가 닫는 중괄호 및 UpgradeProperty) 기준으로 유효한 코드가 아닙니다. 정정 할 수 있습니까?
Frederic

2
이미 맞습니다. UpdateProperty는 속성이 변경되었음을 알리는 방법입니다. 그것은 당신을 위해 완전히 다를 수 있습니다. 속성 변경을 알리는 데 사용하는 모든 방법을 사용하십시오. 그리고 여분의 버팀대?
Kylo Ren

설명 감사합니다. 그리고 당신 말이 맞아요 나는 중괄호 위치에 매료되었다고 생각합니다. 실제로 추가 버팀대가 없습니다. 동의한다면 약간의 코드를 살펴볼 것입니다.
Frederic

9

목록보기는 목록 상자 제어에서 파생됩니다. 가장 중요한 차이점 중 하나는 listview가 기본적으로 확장 선택 모드를 사용한다는 것입니다. listview에는 view라는 속성이 추가되어 사용자 정의 항목 패널보다 더 풍부한 방식으로보기를 사용자 정의 할 수 있습니다. gridview를 사용한 listview의 실제 예는 파일 탐색기의 세부 정보보기입니다. 격자보기가있는 목록보기는 덜 강력한 데이터 격자입니다. 데이터 그리드 컨트롤리스트 뷰가 도입 된 후 그 중요성이 사라졌습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.