2016-09-08 1 views
0

Bei Verwendung des folgenden Codes ist die IP-Adressspalte nicht sortierbar (es passiert nichts, wenn Sie auf die Überschrift klicken und das Sortierereignis nicht ausgelöst wird). Wie kann ich die IP-Adressspalte sortierbar machen?WPF Datagrid, sortiert nach automatisch generierter Spalte mit IP-Adresse

C#:

using System; 
using System.Collections.Generic; 
using System.Collections.ObjectModel; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 

namespace DGrid1 
{ 
    public class Item 
    { 
     public IPAddress Address { get; set; } 
     public string Name { get; set; } 
    } 

    public partial class MainWindow : Window 
    { 
     public ObservableCollection<Item> Collection { get; set; } 
     public MainWindow() 
     { 
      Collection = new ObservableCollection<Item>(); 
      Collection.Add(new Item {Address=IPAddress.Parse("192.168.201.123"), Name="fred" }); 
      Collection.Add(new Item { Address = IPAddress.Parse("192.168.201.241"), Name = "jim" }); 
      InitializeComponent(); 
      this.DataContext = this; 
     } 

     private void grid_Sorting(object sender, DataGridSortingEventArgs e) 
     { 
      System.Diagnostics.Debug.WriteLine(e.Column); 
     } 
    } 
} 

XAML:

<Window x:Class="DGrid1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <DataGrid ItemsSource="{Binding Collection}" AutoGenerateColumns="True" x:Name="grid" Sorting="grid_Sorting"/> 
    </Grid> 
</Window> 

Dank

Antwort

2

Versuchen innerhalb der XAML Ihres Datagrid mit dieser Syntax manuell jede Spalte zu definieren:

<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> 
+0

Thank Sie. Das funktioniert, aber warum ist die Sortierung für IP-Adressen deaktiviert, wenn die Spalten automatisch generiert werden? –

+0

Das ist nicht * wirklich * sortierbar: schau dir meine Antwort an, ich wähle eine sortierbare Eigenschaft und behalte die ursprüngliche automatische Generierung –

+0

@AdrianS, weil .NET nicht weiß, wie man das Klassenelement sortiert, also wenn die Spalten sind Automatisch generiert WPF nicht, wie eine sortierbare Spalte für die Adresse-Eigenschaft generiert wird. Wenn Sie das DataGridTextColumn-Tag manuell schreiben, geben Sie die Eigenschaft Adresse an. –

Verwandte Themen