2009-03-02 21 views
0

Örnek:WPF ListBox ListCollectionView anonim tip navigasyon problemi sorununun

Çerçevesi: WPF Görsel kontrol: Codeplex

public Window() 
{ 
    InitializeComponent(); 

    var listView = new ListCollectionView(
    new[] 
    { 
     new 
     { 
     Bool = false, 
     Str = "Value1" 
     }, 
     new 
     { 
      Bool = false, 
      Str = "Value1" 
     } 
    }.ToList()); 

    dataGrid.ItemsSource = listView; 

    listView.MoveCurrentToFirst(); 
    listView.MoveCurrentToNext(); 
} 

DataGrid imleç 1'e konumunu değiştirmez DataGrid, değişim değeri ise anonim türlerinden biri:

var listView = new ListCollectionView(
    new[] 
    { 
     new 
     { 
     Bool = false, 
     Str = "Value1" 
     }, 
     new 
     { 
      Bool = false, 
      Str = "Value2" 
     } 
    }.ToList()); 

İmleç doğru çalışır ve Selectedındex = 1.

Anonim nesneyi geçersiz kılmak nedeniyle gerçekleşir düşünüyorum GetHashCode() Anonim nesne GetHashCode için: tüm alanların toplamı. Alanlar, anonim nesnelerin 2 farklı örneği için aynıysa, GetHashCode() her iki örnek için de aynı değeri döndürür.

Belki DataGrid nesneleri GetHashCode kullanarak karşılaştırır ve SelectedPosition değiştirmez.

Bu sorunun nasıl önleneceğini bilen var mı?

public class ViewItemHodler 
{ 
    public object ViewItem { get; set; } 
} 

Teşekkür

cevap

2

bir CustomSort vardır: DataGrid'e anonim nesneler Atama ben sütunları nesne için bir sarıcı oluşturmak ve autogenerate zorunda anlamına gelir kesinlikle yazılı nesneleri oluşturamaz, gerekliliktir anonim türler için bir özel sıralama düzeni uygulamanıza olanak sağlayacak olan IComparer<T>'un bir uygulamasına ayarlayabileceğiniz DataGrid özelliği.

http://blogs.msdn.com/jgoldb/archive/2008/08/26/improving-microsoft-datagrid-ctp-sorting-performance.aspx

Ne aslında o bir Comparer<T> temsilci alır ve bir kabuk sınıf oluşturmak yapmak isteyecektir aramaları IComparer<T>.Compare uygulanmasında olduğu: burada CustomSort özellik hakkında daha fazla bilgi yoktur.

Bu şekilde, örneğinizi anonim tür oluşturan kodunuzda (ne olduğunu bilmeyeceğinizden) bildirmek için var kullanabilirsiniz.

Anonim türlere bağlı olduğunuz ve güçlü yazılan nesneler oluşturamadığınız fikri biraz saçmadır. Derleme zamanında bilinmeyen bir kaynaktan anonim sorgular oluşturmuyorsunuz, bu yüzden neden anonim türlerdeki kısıtlamayı göremiyorum.

İlgili konular