XAML 使用自动生成的列进行DataGrid排序

ao218c7q  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(127)

我创建了一个绑定到DynamicItemCollection(实现ITypedList)的DataGrid控件。由于某种原因,我无法通过单击标题对列进行排序(它们甚至不可单击)。
http://www.reimers.dk/jacob-reimers-blog/auto-generating-datagrid-columns-from-dynamicobjects
我的xaml如下:

<DataGrid AutoGenerateColumns="True" CanUserSortColumns="True" IsReadOnly="True" ItemsSource={Binding Data}/>

我错过了什么?是动态数据吗?我如何才能让它排序?

fnx2tebb

fnx2tebb1#

在代码后面声明它

public bool CanUserSort { get; set; }

属性用法请在aspx中引用此部分以获取datagrid标记

<object CanUserSort="bool" .../>

您可以设置true,false条件。由于默认情况下为true,因此您可以对列进行排序。

np8igboo

np8igboo2#

我知道这是一个老职位,但经过一些研究,它似乎是真的很简单:原始链接不再可用,因此有一种方法可以查看remeirs blog
因此,基于这些博客,您现在可以从dynamicObject自动生成一个Datagrid(例如,用于将对象与CSV等文件内容混合)

<DataGrid 
ItemsSource="{Binding Instance_of_DynamicItemCollection_ForDynamicObject }"
CanUserAddRows="False"
IsReadOnly="True"
SelectionUnit="Cell"
SelectionMode="Extended" />

但实际上您无法像在Datagrid中那样对项进行自动排序,并且添加CanUserSortColumns ="True"无效!
有一个非常简单的解决方案:
正在将AutoGeneratingColumn事件添加到数据网格

<DataGrid 
    ItemsSource="{Binding Instance_of_DynamicItemCollection_ForDynamicObject }"
    CanUserAddRows="False"
    IsReadOnly="True"
    SelectionUnit="Cell"
    AutoGeneratingColumn="DataGrid_AutoGeneratingColumn"
    SelectionMode="Extended" />

在后面的代码中:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            e.Column.CanUserSort = true;
        }

以下是有关此eventHandler Datagrid AutogeneratingColumn event from microsoft doc一些文档

相关问题