C# WPF Datagrid,在包含IP地址的自动生成列上排序

C# WPF Datagrid,在包含IP地址的自动生成列上排序,c#,wpf,sorting,datagrid,C#,Wpf,Sorting,Datagrid,使用以下代码时,IP地址列不可排序(单击标题时不会发生任何事情,并且不会触发排序事件)。如何使IP地址列可排序 C#: 使用系统; 使用System.Collections.Generic; 使用System.Collections.ObjectModel; Net系统; 使用System.Windows; 使用System.Windows.Controls; 名称空间DGrid1 { 公共类项目 { 公共IP地址{get;set;} 公共字符串名称{get;set;} } 公共部分类主窗口:窗

使用以下代码时,IP地址列不可排序(单击标题时不会发生任何事情,并且不会触发排序事件)。如何使IP地址列可排序

C#:

使用系统;
使用System.Collections.Generic;
使用System.Collections.ObjectModel;
Net系统;
使用System.Windows;
使用System.Windows.Controls;
名称空间DGrid1
{
公共类项目
{
公共IP地址{get;set;}
公共字符串名称{get;set;}
}
公共部分类主窗口:窗口
{
公共ObservableCollection集合{get;set;}
公共主窗口()
{
集合=新的ObservableCollection();
Collection.Add(新项{Address=IPAddress.Parse(“192.168.201.123”),Name=“fred”});
Collection.Add(新项{Address=IPAddress.Parse(“192.168.201.241”),Name=“jim”});
初始化组件();
this.DataContext=this;
}
私有void grid_排序(对象发送方、DataGridSortingEventArgs e)
{
系统.诊断.调试.写入线(e列);
}
}
}
XAML:



感谢您尝试使用以下语法手动定义数据网格XAML中的每一列:

<DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="False" x:Name="grid" Sorting="grid_Sorting">
    <DataGrid.Columns>
        <DataGridTextColumn Header="IP" Binding="{Binding Address}" SortMemberPath="Address" />
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" SortMemberPath="Name" />
    </DataGrid.Columns>
</DataGrid>

尝试使用以下语法手动定义数据网格XAML中的每一列:

<DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="False" x:Name="grid" Sorting="grid_Sorting">
    <DataGrid.Columns>
        <DataGridTextColumn Header="IP" Binding="{Binding Address}" SortMemberPath="Address" />
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" SortMemberPath="Name" />
    </DataGrid.Columns>
</DataGrid>


谢谢。这是可行的,但是当自动生成列时,为什么对IP地址禁用排序?这不是真正的可排序:看看我的答案,我选择了一个可排序属性并保留了原始的自动排序-generation@AdrianS因为.NET不知道如何对类项进行排序,所以当自动生成列时,WPF不知道如何为Address属性生成可排序列。手动写入DataGridTextColumn标记时,请指定属性地址。谢谢。这是可行的,但是当自动生成列时,为什么对IP地址禁用排序?这不是真正的可排序:看看我的答案,我选择了一个可排序属性并保留了原始的自动排序-generation@AdrianS因为.NET不知道如何对类项进行排序,所以当自动生成列时,WPF不知道如何为Address属性生成可排序列。手动写入DataGridTextColumn标记时,指定属性地址。
<DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="False" x:Name="grid" Sorting="grid_Sorting">
    <DataGrid.Columns>
        <DataGridTextColumn Header="IP" Binding="{Binding Address}" SortMemberPath="Address" />
        <DataGridTextColumn Header="Name" Binding="{Binding Name}" SortMemberPath="Name" />
    </DataGrid.Columns>
</DataGrid>