2014-02-18 54 views
1

我有一個XAML中的ListView,它顯示了其在GridView(與列)時尚的源集合。 但是我打算使用相同的ListView來顯示源集合,可能是在一個網格圖像或一些卡片視圖中。 我希望ListView根據組合框選擇自行更改。所以說對於ComboBox值1 ListView應該顯示一個GridView,對於值爲2的ListView應該顯示卡片視圖。 目前我的ListView指定一個GridView設置其視圖屬性:動態更改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顯示基於組合框觸發不同的看法。

回答

1

ListView ViewViewBase類型的DependencyProperty。因此,您可以做的是創建您自己的自定義視圖,並可以通過組合框選定項目上的DataTrigger進行設置。

微軟已經有在線樣本,您可以從here下載。

OR

可能是你可以資源作爲兩個單獨的DataTemplates定義兩個單獨的ListView的。

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

,並已經制定一個ContentControl,您可以根據在組合框中選擇的價值交換的內容。

<ContentControl> 
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
     <Setter Property="Content" 
       Value="{StaticResource GridViewTemplate}"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedValue}" Value="Value2"> 
        <Setter Property="Content" 
          Value="{StaticResource CardViewTemplate}"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 
+1

兩者似乎都是完美的解決方案......但如果我必須做出選擇,我應該選擇哪一個......根據您的解決方案哪個更好地實施......從性能。 – Lucifer

+1

如果你有兩個以上的模板,我會建議第一種方法,否則第二種方法將滿足您的需求。性能影響似乎與我相同,因爲在運行時您正在更改模板。在第一種情況下,您正在更改ListView模板,第二種情況是ContentControl模板。 –