Fragensteller
Falsche Wertanzeige beim aufrufen der SelectedIndex der ListView

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.
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 -
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
-
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 -
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
-
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