2009-12-01 47 views
0

將Silverlight DataGrid與IList派生數據源一起使用時,可以單擊列進行排序,假定CanUserSortColumns/CanUserSort屬性不爲false。Datagrid無法在某些字段上進行排序 - 對象,對象子字段,基類型

但是我發現一些邊緣案例不能按 - 值顯示,但點擊列沒有效果。

第一個邊緣案例似乎是非常簡單的List<string>,它顯示了值,但不允許排序。這與字符串impliments IComparable沒有太大關係。

第二個邊緣案例要複雜得多,可能需要解決。第二種情況涉及對象類型的字段和子字段。

public class ContainerItem 
{  
    public object ChildValue {get; set;} 

    // Other properties 
} 

ChildValue的值可以顯示在網格中,如果分配給ChildValue類型具有的屬性,我們還可以綁定到他們(ChildValue。物業),但我們不能對列進行排序。

很明顯,這裏缺少定義類型是一個問題 - 如果對象中存在不同的,不兼容的類型,顯然會出現問題。在我的具體情況中,我堅持這一點,因爲ChildValue是動態分配的,就像列綁定定義一樣。我看起來很明顯,我需要一個解決方法 - 我有控制ContainerItem類的定義,並且對ChildValue屬性的綁定始終是OneWay(只有ContainerItem的固定屬性使用雙向綁定)。

我可能使用SortMemberPath並將其綁定到ContainerItem的某個數組屬性,其中數組的每個元素都是一個ContainerItemComparer對象,該對象充滿了列的綁定信息,以便它可以從兩個ChildValue屬性中提取值,比較它們,並返回結果,而DataGrid沒有意識到這些屬性是裸露的對象?

回答

1

我認爲第一個邊緣案例很人造。爲什麼要將一個字符串列表綁定到一個數據網格?它可能不起作用,因爲它沒有屬性名稱用作排序路徑。

對於動態排序問題,您可能會更好地在您的集合中實現ICollectionView。然後,您可以手動控制排序,但是您想要處理它,而不要強制它通過內置排序工作。

相關問題