2014-02-18 46 views
1

GridView (열 포함) 형식으로 소스 컬렉션을 표시하는 ListView가 XAML에 있습니다. 그러나 동일한 ListView를 사용하여 이미지 컬렉션이나 일부 카드보기에 소스 컬렉션을 표시하려고합니다. ComboBox 선택 항목을 기반으로 ListView 자체를 변경하려고합니다. ComboBox 값 1에 대해 말하십시오. ListView는 GridView를 표시해야합니다. 값 2는 ListView가 카드보기를 표시해야합니다. 내가 콤보 트리거에 따라 다른보기를 표시 할 수있는 ListView를 변경하는 방법을 알고 싶습니다동적으로 변경되는 WPF ListView ItemsPanel & ItemsContainerStyle

<ListView ItemsSource="{Binding PersonList}" Width="450" HorizontalAlignment="Right" IsSynchronizedWithCurrentItem="True"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="FirstName" DisplayMemberBinding="{Binding FirstName}" /> 
       <GridViewColumn Header="LastName" DisplayMemberBinding="{Binding LastName}" /> 
       <GridViewColumn Header="Ip Address" DisplayMemberBinding="{Binding Path=IpAddress}" /> 
      </GridView> 
     </ListView.View> 
    </ListView> 

: 현재 내 ListView에는보기 속성으로 설정의 GridView를 지정합니다.

답변

1

ListView ViewViewBase 유형의 종속성입니다. 따라서 사용자가 수행 할 수있는 것은 자신의 사용자 지정보기를 만들고 combobox에서 선택한 항목의 DataTrigger를 통해 설정할 수 있습니다.

Microsoft는 이미 온라인에서 사용할 수있는 샘플을 가지고 있으며 here에서 다운로드 할 수 있습니다.

또는

자원이 별도의 DataTemplates로에 두 개의 별도의 ListView의를 정의 할 수 있습니다 될 수 있습니다.

<Window.Resources> 
    <DataTemplate x:Key="GridViewTemplate"> 
     <ListView/> <!-- GridView --> 
    </DataTemplate> 
    <DataTemplate x:Key="CardViewTemplate"> 
     <ListView/> <!-- CardView --> 
    </DataTemplate> 
</Window.Resources> 

및 장소에 하나 ContentControl을 가지고 있고 당신은 콤보 상자에서 선택한 값에 따라 그 내용을 바꿀 수 있습니다.

+1

두 가지 모두 완벽한 솔루션 인 것처럼 보입니다.하지만 선택할 수있는 선택이 필요한 경우 ... 솔루션의 구현에 따라 ... 구현하는 것이 더 나을 것입니다. 공연. – Lucifer

+1

템플릿이 두 개 이상인 경우 먼저 두 번째 접근 방식을 사용하면 사용자의 요구를 충족시키는 방법을 제안합니다. 런타임에 템플릿을 변경하기 때문에 성능에 미치는 영향은 나에게 동일하게 보입니다. 첫 번째 경우 ListView 템플릿과 두 번째 ContentControl 템플릿이 변경됩니다. –