程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> WPF綁定到集合,WPF綁定集合

WPF綁定到集合,WPF綁定集合

編輯:C#入門知識

WPF綁定到集合,WPF綁定集合


什麼是集合視圖?

集合視圖是位於綁定源集合頂部的一層,您可以通過它使用排序、篩選和分組查詢來導航和顯示源集合,而無需更改基礎源集合本身。集合視圖還維護著一個指向集合中的當前項的指針。如果源集合實現了 INotifyCollectionChanged 接口,則CollectionChanged 事件引發的更改將傳播到視圖。

如果將控件直接綁定到集合,則 WPF 會綁定到其默認視圖。此默認視圖由直接到同一集合的所有綁定共享,因此一個綁定控件或代碼對默認視圖所做的更改(如排序或對當前項指針的更改)會反映在到同一集合的所有其它綁定中。

演示共享集合視圖

有時使用ItemsControl控件顯示對象集合,當選中其中一項時,顯示其詳細信息,如下圖所示:

<Button Content="{Binding }" /> <Button Content="{Binding Path=/}" /> <Button Content="{Binding Path=/Description}" />

下面的代碼定義了ContentControl綁定數據的顯示模板

<DataTemplate x:Key="DetailTemplate">
            <Border Width="300" Height="100" Margin="20" BorderBrush="Aqua" BorderThickness="1" Padding="8">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition/>
                        <RowDefinition/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Row="0" Grid.Column="0" Text="First Name:"/>
                    <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FirstName}"/>
                    <TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name:"/>
                    <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=/LastName}"/>
                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Home Town:"/>
                    <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=/HomeTown}"/>
                </Grid>
            </Border>
</DataTemplate>

下面的代碼演示綁定到集合

<ListBox Width="200" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource MyFriends}}"/>
<ContentControl Content="{Binding Source={StaticResource MyFriends}}" ContentTemplate="{StaticResource DetailTemplate}"/>

演示如何創建集合視圖

如果不想共享一個視圖,可以創建一個新視圖,下面代碼演示創建了一個集合視圖的靜態資源:

<Window.Resources>
<CollectionViewSource 
      Source="{Binding Source={x:Static Application.Current}, Path=AuctionItems}"   
      x:Key="listingDataView" />
</Window.Resources>

CollectionViewSource 是 CollectionView 類或從 CollectionView 派生的類的代理。CollectionViewSource 使 XAML 代碼能夠設置常用的 CollectionView 屬性,從而將這些設置傳遞到基礎視圖。CollectionViewSource 具有一個保存實際視圖的 View 和一個保存源集合的 Source 屬性。

然後可以將控件綁定到該視圖:

<ListBox Name="Master" Grid.Row="2" Grid.ColumnSpan="3" Margin="8"
    ItemsSource="{Binding Source={StaticResource listingDataView}}">
</ListBox>

注:

CollectionViewSource 是代理類,其中保存的實際視圖參考以下類型:

源集合類型 集合視圖類型 說明 IEnumerable 基於CollectionView的內部類型 無法對項進行分組 IList ListCollectionView 最快 IBindingList BindingListCollectionView  

在代碼中獲取集合視圖的方式是:

(ListCollectionView) view=(ListCollectionView)CollectionViewSource.GetDefaultView(rootElement.DataContext);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved