2009-07-01 32 views
2

如果我使用相同的ItemsSource創建多個ListView s,它們會變得很奇怪。在下面的例子中,兩個ListView顯示了一個公共的字符串列表。斷言表明兩個ItemCollectionSortDescriptionCollection是不同的,但如果我嘗試對ListView進行不同的排序,則將第二個排序順序應用於兩者。ListView的ItemCollections如何關聯?

兩個ItemCollection必須相關,以便Selector.IsSynchronizedWithCurrentItem屬性有任何效果,但我希望能夠打破這種關聯,以便我可以像本示例中嘗試過的那樣執行操作。有誰知道這些收藏是如何相關的,以及我如何才能切斷這種關係?

XAML:

<Window 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:llv="clr-namespace:LinkedListViews" 
     x:Class="LinkedListViews.Window1" 
     x:Name="Window" 
     Title="Window1" 
     Width="640" Height="480"> 

    <Grid x:Name="LayoutRoot"> 
     <ListView 
       x:Name="ListView1" 
       ItemsSource="{Binding ElementName=Window, Path=Data}" 
       Margin="75,8,0,8" Width="237" HorizontalAlignment="Left"/> 
     <ListView 
       x:Name="ListView2" 
       ItemsSource="{Binding ElementName=Window, Path=Data}" 
       HorizontalAlignment="Right" Margin="0,8,73,8" Width="243"/> 
    </Grid> 
</Window> 

後面的代碼:

using System; 
using System.IO; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Navigation; 
using System.ComponentModel; 
using System.Collections.Generic; 

namespace LinkedListViews 
{ 
    public partial class Window1 
    { 
     private List<string> _Data = new List<string> 
     { 
      "Alpha", "Beta", "Gamma" 
     }; 
     public List<string> Data 
     { 
      get { return _Data; } 
     } 

     public Window1() 
     { 
      this.InitializeComponent(); 

      // Insert code required on object creation below this point. 
      System.Diagnostics.Debug.Assert(ListView1.Items != ListView2.Items); 
      System.Diagnostics.Debug.Assert(ListView1.Items.SortDescriptions != ListView2.Items.SortDescriptions); 
      this.ListView1.Items.SortDescriptions.Add(new SortDescription(null, ListSortDirection.Ascending)); 
      this.ListView2.Items.SortDescriptions.Clear(); 
      this.ListView2.Items.SortDescriptions.Add(new SortDescription(null, ListSortDirection.Descending)); 
     } 
    } 
} 

回答