2013-08-23 43 views
0

我有datagrid绑定到ObservableCollection。其中一个柱体与物体本身相连,而不是一个属性:silverlight datagrid:绑定到对象的排序列

<sdk:DataGrid 
     ItemsSource="{Binding PersonList}" 
     AutoGenerateColumns="False"> 
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn 
       Binding="{Binding}" 
       Header="Person" 
       SortMemberPath="FirstName" 
       /> 
      <sdk:DataGridTextColumn 
       Binding="{Binding FirstName }" 
       Header="FirstName" 
       /> 
      <sdk:DataGridTextColumn 
       Binding="{Binding LastName }" 
       Header="LastName" 
       /> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 

我想使列绑定到对象本身可排序。我认为这足以让班级人员实现IComparable。但似乎这还不够:

public class Person : IComparable<Person> 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public override string ToString() 
    { 
     return string.Format("{0} {1}", FirstName, LastName); 
    } 

    public int CompareTo(Person other) 
    { 
     return FirstName.CompareTo(other.FirstName); 
    } 
} 

回答

0

试试这个,你不必为排序创建单独的列,

<sdk:DataGrid 
     ItemsSource="{Binding PersonList}" 
     AutoGenerateColumns="False"> 
     <sdk:DataGrid.Columns> 

      <sdk:DataGridTextColumn 
       Binding="{Binding FirstName }" 
       Header="FirstName" 
       CanUserSort="True" 
       /> 
      <sdk:DataGridTextColumn 
       Binding="{Binding LastName }" 
       Header="LastName" 
       /> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 
+0

其实我贴的代码只是一个例子,没有意义。真实场景太复杂,无法发布,所以我将其缩减为这个例子。在真实场景中,我有一个绑定到整个对象的列(不仅仅是对象的属性),而且我想根据类的CompareTo方法中实现的某些逻辑对此列进行排序。 – user1472131