none
Falsche Wertanzeige beim aufrufen der SelectedIndex der ListView RRS feed

  • Frage

  • Warum kann ich nicht bei der ListView hier:

    <ListView Name="lstViewShowNames">
                    <ListView.View>
                        <GridView AllowsColumnReorder="True">
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="100" />
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Surname}" Header="Surname" Width="100" />
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Address}" Header="Address" Width="200" />
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Phone}" Header="Phone" Width="120" />
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Email}" Header="E-Mail" Width="200" />
                            <GridViewColumn DisplayMemberBinding="{Binding Path=Birthday}" Header="Birthday" Width="100" />
                        </GridView>
                    </ListView.View>
                </ListView>

    mit 

    int selectedIndexValue = lstViewShowNames.SelectedIndex;

    auf das, in der Liste gewählten Element, zugreifen? Mir wird immer das erste Element angezeigt egal was ich gewählt habe.

    Donnerstag, 21. April 2016 08:58

Alle Antworten

  • Hi,
    mit dem nachfolgenden Code kann man Dein Problem nicht reproduzieren. Es wird also in Deinem Code ein Problem geben:

    <Window x:Class="WpfApplication1.Window27"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication1"
            mc:Ignorable="d"
            Title="Window27" Height="300" Width="300">
      <Window.Resources>
        <local:Window27VM x:Key="vm"/>
      </Window.Resources>
        <StackPanel DataContext="{Binding Source={StaticResource vm}}">
        <TextBox Text="{Binding ElementName=lstViewShowNames, Path=SelectedIndex}"/>
        <ListView Name="lstViewShowNames" ItemsSource="{Binding View}">
          <ListView.View>
            <GridView AllowsColumnReorder="True">
              <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="100" />
              <GridViewColumn DisplayMemberBinding="{Binding Path=Surname}" Header="Surname" Width="100" />
              <GridViewColumn DisplayMemberBinding="{Binding Path=Address}" Header="Address" Width="200" />
              <GridViewColumn DisplayMemberBinding="{Binding Path=Phone}" Header="Phone" Width="120" />
              <GridViewColumn DisplayMemberBinding="{Binding Path=Email}" Header="E-Mail" Width="200" />
              <GridViewColumn DisplayMemberBinding="{Binding Path=Birthday}" Header="Birthday" Width="100" />
            </GridView>
          </ListView.View>
        </ListView>
      </StackPanel>
    </Window>


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Donnerstag, 21. April 2016 11:07
  • Hallo,

    danke für die schnelle Antwort. 
    Wird es überhaupt mit selectedIndex gemacht?

    Ich habe das hier, um den ersten Index immer gewählt zu haben (null Fehler umgehen):

    lstViewShowNames.SelectedIndex = 0;

    Wenn ich es rausnehme, dann bekomme ich über all, also bei Name, Surname usw., eine null raus. Auch wenn ich das 3te Element in der Liste gewählt habe.

    Grüße

    Steve

    Donnerstag, 21. April 2016 12:03
  • Hallo Steve,

    Wird es überhaupt mit selectedIndex gemacht?

    Was hast du denn eigentlich genau vor?

    Ich habe das hier, um den ersten Index immer gewählt zu haben (null Fehler umgehen):
    lstViewShowNames.SelectedIndex = 0;

    Wenn du den Code nur einmal ausführst wird der Index auch nur zu diesem Zeitpunkt gesetzt. Setzt du ihn vielleicht immer im SelectionChanged-Event o.ä. auf 0? Das würde erklären warum du entsprechend immer 0 erhältst wenn du den Wert abfragst.

    Was du mit null-Fehler meinst weiß ich nicht. Eine NullReferenceException o.ä. kannst du hier nicht bekommen da der Index nicht null sein kann (da Int32 ein Werttyp ist)

    Wenn ich es rausnehme, dann bekomme ich über all, also bei Name, Surname usw., eine null raus. Auch wenn ich das 3te Element in der Liste gewählt habe.

    Einersiets fragst du den Index ab, andererseits schreibst du dass du Name etc. abrufst. Was willst du denn nun? Vielleicht suchst du Auch SelectedValue oder SelectedItem?

    Sonst geht es mir wie Peter. Das ListView arbeitet exakt so wie ich es erwarte und SelectedIndex wird immer passend meiner Auswahl gesetzt.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 21. April 2016 12:15
    Moderator
  • Hallo,

    Entschuldigung, dass ich mich nicht genau ausgedrückt habe. 

    Ich habe folgendes vor: 

    Ich habe eine Liste die mit ListView angezeigt wird. Z.B. drei Namen, die in eine Liste aufgezählt werden.

    Wenn ich nun Max Mustermann auswählen sollte dann müsste ich an der Stelle

    public Person getSelectedPersonCollectionElement()
    {
                return liste.ElementAt(lstViewShowNames.SelectedIndex);
    }

    eigentlich eine "2" sehen. 

    Ich hoffe, jetzt versteht ihr besser was ich meine.

    Grüße

    Steve



    • Bearbeitet jclstefan Donnerstag, 21. April 2016 13:04
    Donnerstag, 21. April 2016 13:00
  • Hallo,

    Wenn ich nun Max Mustermann auswählen sollte dann müsste ich an der Stelle

    public Person getSelectedPersonCollectionElement()
    {
                return liste.ElementAt(lstViewShowNames.SelectedIndex);
    }

    wenn ich das aber richtig lese gibt deine Funktion: getSelectedPersonCollectionElement() keinen Index sondern die Klasse Person zurück.

    Eine 2 bekommst Du doch nur über lstViewShowNames.SelectedIndex zurück.

    public int getSelectedPersonCollectionElement()
    {
                return lstViewShowNames.SelectedIndex();
    }

    VG

    Okeanos

    • Bearbeitet Okeanos85 Donnerstag, 21. April 2016 13:56
    Donnerstag, 21. April 2016 13:56