warum kann ich nicht packen Sie einfach den Text, wie ich in winform tat
Man kann, wenn das Objekt richtig dereferenziert wird ....
Alles, was ich will, ist der Text des ausgewählten Indexes.
Aber was sollte der ToString()
Text einer Rückkehr Key Value-Pair-Struktur wie pro Ihr Beispiel? Haben Sie ToString()
überlastet?
Zwei Probleme zu lösen
- Sind Sie sicher, dass die SelectedItem nicht null ist? Überprüfen Sie vor dem Zugriff auf diesen Zustand.
- Man sollte auf die entsprechende Struktur gegossen (a KVP), anstatt blind
ToString()
und Referenz die entsprechende Eigenschaft von entweder Key
oder Value
aufrufen.
Ansonsten hier sind Beispiele.Die erste ist eine List-Box zu einem Wörterbuch gebunden
myDictionary = new Dictionary<string, string>()
{
{"Alpha", "The First Letter"},
{"Beta", "The Second Letter"},
{"Omega", "Omega Letter"},
};
Wenn die Benutzer jedes Element auswählt, der Schlüssel und Wert zeigt in Textfeldern unter der List-Box:
Xaml
<ListBox Name="lbDictionary"
ItemsSource="{Binding myDictionary}"
SelectedValuePath="Key"
DisplayMemberPath="Value"/>
Und der Zugriff auf sie in Textfelder (Ich zeige nicht die Etiketten von "Key" und „Wert“ der Kürze halber)
<TextBlock Text="{Binding SelectedItem.Key, ElementName=lbDictionary}"/>
...
<TextBlock Text="{Binding SelectedItem.Value, ElementName=lbDictionary}"/>
daher für den Zugriff in Code hinter für Key
als solche ist, würde Value
gleich sein:
if (lbDictionary.SelectedItem != null)
MessageBox.Show(((KeyValuePair<string, string>) (lbDictionary.SelectedItem)).Key);
else
MessageBox.Show("Select something");
Wenn Sie den Schlüssel bekommen, warum nicht nur erhalten der Wert aus dem Wörterbuch? –
An diesem Punkt ist das Wörterbuch nicht mehr verfügbar. Ich lade die Artikel aus einer SQL-Datenbank. Ich benutze das Wörterbuch als temporärer Halter. Ich nehme an, ich könnte das Wörterbuch herumliegen lassen, aber warum kann ich nicht einfach den Text greifen wie in Winform. – Jeebwise
Nun LbContractors hat immer noch eine Kopie davon, da es es braucht, so dass Sie es immer von LbContractors.ItemsSource greifen können. Obwohl es wahrscheinlich eine bessere Lösung gibt, ist dies nur eine Möglichkeit –