將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沒有意識到這些屬性是裸露的對象?