如何排序DataGridTemplateColumn(它使用MultiBinding),在相同的顺序作为Multibou



我有一个自定义实体,它包含FirstName, LastName属性(它也有其他属性)。我将这个实体绑定到一个数据网格,它将FullName (LastName, FirstName)显示为DataGridTemplateColumn(使用StringFormat的MultiBinding)。允许用户对数据网格列进行排序,当他们单击FullName列时,记录必须按LastName然后FirstName排序(排序方向将根据单击次数切换)。我想知道是否有可能在上述场景中实现所需的排序(多列)?

我尝试使用SortMemberPath属性,但我只能指定一列。

我知道如果我添加一个自定义的ReadOnly属性命名为FullName到我的实体的东西会起作用,但我只是想了解如果有可能实现相同的MultiBinding实现。

谢谢,Pankaj

我找到了另一个有帮助的线程。您可以使用DataGrid。事件来覆盖这里提到的默认排序。这个答案说他或她覆盖了DataGrid,但你不必这样做。它还假设您使用了illist作为数据源,因此这里有一个示例,相反,假设一个DataTable/DataView (IBindingList)源:

    private void dgPeople_Sorting(object sender, DataGridSortingEventArgs e)
    {
        //Assumes you've named your column colFullName in XAML
        if (e.Column == colFullName)
        {
            ListSortDirection direction = (e.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
            //set the sort order on the column
            e.Column.SortDirection = direction;
            //Prevent the default sorting
            e.Handled = true;
            //Get the static default view that the grid is bound to to redefine its sorting
            BindingListCollectionView cv = (BindingListCollectionView)CollectionViewSource.GetDefaultView(dgPeople.ItemsSource);
            cv.SortDescriptions.Clear();
            cv.SortDescriptions.Add(new SortDescription("FirstName", direction));
            cv.SortDescriptions.Add(new SortDescription("LastName", direction));
            cv.Refresh();
        }
    }

我发现需要在ICollectionView(本例中为BindingListCollectionView)上执行排序而不是在DataView上执行排序的困难方法。如果不这样做,则在DataView上执行的排序将被ICollectionView上的排序集覆盖。

我发现这个链接非常有用:http://msdn.microsoft.com/en-us/library/ms752347.aspx#what_are_collection_views

相关内容

  • 没有找到相关文章

最新更新