2009-07-01 8 views
2

同じItemsSourceの複数のListViewを作成した場合、それらは奇妙な関係になります。次の例では、2つのListViewは文字列の共通リストを表示します。アサーションでは、2つのItemCollectionSortDescriptionCollectionが区別されていますが、ListViewを別の方法でソートしようとすると、2番目のソート順が両方に適用されます。ListViewのItemCollectionsはどのように関係していますか?

Selector.IsSynchronizedWithCurrentItemプロパティが効果を持つためには、2つのItemCollectionが関連している必要がありますが、この例で試したようにこの関連付けを解除することができます。誰もがこれらのコレクションがどのように関係しているのか、そして私がこの関係をどのように切断できるかを知っていますか?

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)); 
     } 
    } 
} 

答えて

関連する問題