Announcement

Collapse
No announcement yet.

DataGrid Sortierung und SelectedIndex

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGrid Sortierung und SelectedIndex

    Habe ein Problem mit meinem DataGrid. ItemsSource und SelectedIndex sind mit dem ViewModel verbunden, funktioniert alles wunderbar.

    Nur, wenn ich auf einen ColumnHeader des DataGrid klicke, wird dieses anders sortiert. Und wenn ich nun ein anderes Item anklicke, wird das im ViewModel falsch interpretiert. z.B. Item 1 wird angeklickt, es handelt sich aber nun um Item 33 meiner Model-Liste.

    Was kann man da tun?

    Eine Bindung mit SelectedItem? Wie muß meine Funktion im ViewModel aussehen. Das ViewModel kennt doch kein SelectedItem, es weiß ja nicht einmal, daß es in einem DataGrid angezeigt wird.

    Oder kann das DataGrid mir auch den "OriginalIndex" verraten?

    Danke - Günther
    Günther

  • #2
    Hallo,

    binde an das DataGridView eine CollectionViewSource - diese Unterstützt Sortierung.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      ok, die Sortierung hab ich. Aber die Bindung mit SelectedItem, wie krieg ich die hin?

      Code:
       
      <UserControl.Resources>
              <CollectionViewSource
              x:Key="HerstellerSort" 
              Source="{Binding Path=PumpenherstellerListe}" >
              <CollectionViewSource.SortDescriptions>
                  <scm:SortDescription PropertyName="PumpenHersteller" Direction="Ascending" />
                  <scm:SortDescription PropertyName="" Direction="Ascending" />
              </CollectionViewSource.SortDescriptions>
          </CollectionViewSource>
      </UserControl.Resources>
      
      
       <DataGrid DataContext="{StaticResource HerstellerSort}"  ItemsSource="{Binding}" SelectedIndex="{Binding PumpenHerstellerIdx, Mode=TwoWay}"....
      Günther

      Comment


      • #4
        Hallo,

        Aber die Bindung mit SelectedItem, wie krieg ich die hin?
        Wenn ich jetzt gemein wäre dann würde ich schreiben dass das in einem Link den ich dir gepostet habe wunderschön an einem Beispiel gezeigt wurde.

        Da ich aber nicht ganz so gemein bin - und auch für alle anderen die nicht wissen um was es geht - der Link erneut: WPF Apps With The Model-View-ViewModel Design Pattern


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Aus dieser MVVM-Demo-App habe ich ja den Großteil meines Codes übernommen. Daß da auch das SelectedItem behandelt wird, war mir zuerst nicht aufgefallen. Jetzt funktioniert es so weit, allerdings gibt es da noch ein seltsames Phänomen:

          Ich starte mein Programm und doppelklicke auf den Fensterheader, damit es vergrößert wird. Im Fenster sehe ich das Grid mit der Herstellerliste, um die es hier geht. In dem Grid sehe ich auch das Feld IsSelected, weil AutoGenerateColumns im Moment noch auf True steht.

          Unter der Liste sehe ich die Typenliste, die nach einem PropertyChanged aktualisiert wird. Die Selektierung von Item 0 gebe ich vor, die Darstellung auf dem Bildschirm ist in Ordnung, lediglich Item 0 wird nicht als selektiert hervorgehoben, sondern erst wenn ich mit der Maus reinklicke.

          Nun gehe ich mit der Pfeil-Abwärts-Taste schrittweise nach unten. Die Liste enthält 38 Einträge, sichtbar sind die Einträge 0 bis 21. Ab Zeile 22 muß er also scrollen. Alles in Ordnung, bis ich bei Item 28 angekommen bin. Hier wird zwar das IsSelected-Häkchen von Zeile 27 entfernt, in Zeile 28 aber nicht gesetzt. Demzufolge ändert sich auch die Typenliste nicht, weil ja kein PropertyChanged für Item 28 stattgefunden hat. Die Hervorhebung der Zeile 28 ist aber ok.

          Gehe ich noch weiter nach unten, wird Item 29 ebenfalls falsch behandelt, Items 30 bis 32 sind wieder ok, Items 33 bis 37 wieder falsch. Ich kann mit der Cursortaste beliebig oft rauf und runter gehen, immer wieder werden die Items 28,29 und 33 bis 37 falsch behandelt.

          Sobald ich schnell scrolle oder mit der Maus scrolle, ändert sich der Fehler, es werden mehrere Items nicht selektiert. Welche, ist scheinbar nicht reproduzierbar. Wenn ich zuvor in der XAML Datei eine andere Höhe definiere, liegt der reproduzierbare Fehler bei anderen Items. Wenn z.B. 9 Zeilen sichtbar sind, werden Items 15,16 und 20 bis 37 falsch behandelt.

          Ich denke mal, es macht wenig Sinn, meinen Code hier zu posten. Wo könnte ich den Fehler suchen?
          Günther

          Comment


          • #6
            Hab eine Lösung gefunden. Ohne CollectionView, ohne schwer durchschaubaren XAML-Code. SelectionChanged wird an eine Funktion im Code-Behind übergeben, die ermittelt das ViewModel und leitet die dort benötigte Information weiter. Funktioniert wunderbar und vor allem fehlerfrei.
            Günther

            Comment

            Working...
            X