使用 ItemsSource 填充的 DataGrid 无法排序,尽管 CanUserSortColumns="true"

DataGrid populated using ItemsSource not sortable despite CanUserSortColumns="true"

我有一个从数据库填充的数据网格,因此我可以查看和更改数据库。

但是,您无法通过单击 header 对列进行排序。当您单击它们时,什么也没有发生。我在 S.O 上看到了很多问题。像这样,我已经更改了很多 XMAL 并尝试了不同的方法,但似乎没有答案能为我解决这个问题。

这是我的 C#。

    public Window1()
    {
        InitializeComponent();
        LoadDataGrid();
    }

    private void LoadDataGrid()
    {
        TasksDataContext tasksDB = new TasksDataContext();
        var tasks = (from p in tasksDB.LubeTasks select p);
        MyDataGrid.ItemsSource = tasks;
    }

这是我从教程中第一次尝试的 XMAL:

    <grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True">
        <grid:DataGrid.Columns>

            <grid:DataGridTextColumn Binding="{Binding Path=Number}"
                                Header="Number" CanUserSort="True" />


            <grid:DataGridTextColumn Binding="{Binding Path=Description}"
                                Header="Description" CanUserSort="True"/>

        </grid:DataGrid.Columns>
    </grid:DataGrid>

我也尝试添加 SortMemberPath="Number.code"SortMemberPath="Number" 之类的东西,并尝试使用不同的标签,但它仍然无法排序。

我也在另一个教程 here 中尝试过这样的结构,但它也不起作用。

    <grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True" ItemsSource="{Binding}">
        <grid:DataGrid.Columns>


                <grid:DataGridTemplateColumn  SortMemberPath="Number" CanUserSort="true">
                    <grid:DataGridTemplateColumn.CellTemplate >
                        <DataTemplate>
                            <TextBlock>
                                <TextBlock.Text>
                                    <Binding Path="Number"/>
                                </TextBlock.Text>
                            </TextBlock>
                        </DataTemplate>
                    </grid:DataGridTemplateColumn.CellTemplate>
                </grid:DataGridTemplateColumn>

                <grid:DataGridTemplateColumn  SortMemberPath="Description" CanUserSort="true">
                    <grid:DataGridTemplateColumn.CellTemplate >
                        <DataTemplate>
                            <TextBlock>
                                <TextBlock.Text>
                                    <Binding Path="Description" />
                                </TextBlock.Text>
                            </TextBlock>
                        </DataTemplate>
                    </grid:DataGridTemplateColumn.CellTemplate>
                </grid:DataGridTemplateColumn>

        </grid:DataGrid.Columns>
    </grid:DataGrid>

我填充数据网格的方式有问题吗?我试过使用 MyDataGrid.DataContext = tasks; 但如果我这样做,我似乎根本无法填写数据网格。

非常感谢任何建议。

您需要将来自数据库的 LINQ 结果放在支持排序的结构中。

试试这个:

    TasksDataContext tasksDB = new TasksDataContext();
    var tasks = (from p in tasksDB.LubeTasks select p).ToList();
    MyDataGrid.ItemsSource = tasks;