DataGrid Column Sortieren

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    DataGrid Column Sortieren

    Guten Morgen,

    ich habe ein DataGrid in dem ich in einer Spalte IP-Adressen anzeige. Diese werden per Default ja als String (0-9,A-Z) sortiert, sobald auf den header geklickt wird... was in diesem Fall ja eher bescheiden ist.

    Die ItemSource ist eine ObservableCollection im ViewModel.

    Mein DataGrid sieht derzeit so auf:
    github.com/BornToBeRoot/NETwor…s/IPScannerView.xaml#L156

    Wie kann ich für diese Spalte / Header einen eigene Sortierung umsetzten, sobald auf den Header geklickt wird?!

    Danke!!! :thumbup:
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Hallo
    die Lösung ist einfacher als man denkt. Mach dir z.b. ein ReadOnly Property im ViewModel (Item) welches die MAC Adresse in dem Format enthält in welchem du sortieren willst.
    Dann in der Column mit SortMemberPath="NiceMacPropertie" angeben welches Property für die Sortierung genommen werden kann.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Danke für den Ansatz :thumbsup: habs jetzt so gelöst:

    Im View:
    <DataGridTextColumn Header="{DynamicResource String_IPAddress}" Binding="{Binding PingInfo.IPAddress}" SortMemberPath="PingInfo.IPAddressInt32" MinWidth="150" />

    In meinem Model/Item:

    C#-Quellcode

    1. public class PingInfo
    2. {
    3. public DateTime Timestamp { get; set; }
    4. public IPAddress IPAddress { get; set; }
    5. public int Bytes { get; set; }
    6. public long Time { get; set; }
    7. public int TTL { get; set; }
    8. public IPStatus Status { get; set; }
    9. public int IPAddressInt32
    10. {
    11. get { return IPAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ? IPv4AddressHelper.ConvertToInt32(IPAddress) : 0; }
    12. }
    13. public PingInfo()
    14. {
    15. }
    16. // more...
    17. }


    Helper:

    C#-Quellcode

    1. public static int ConvertToInt32(IPAddress ipAddress)
    2. {
    3. byte[] bytes = ipAddress.GetAddressBytes();
    4. Array.Reverse(bytes);
    5. return BitConverter.ToInt32(bytes, 0);
    6. }


    Ich kann ja Problemlos die IPv4 in Int32 umwandeln und Int32 ist ja IComparable.

    Vieles kann so einfach sein^^

    Danke und Grüße
    BornToBeRoot
    NETworkManager - A powerful tool for managing networks and troubleshoot network problems!
    Stimmt. Elegante Lösung. Vielen kann so einfach sein.

    Grüße
    PS: Überhaupt in der WPF.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##