Was ist der Unterschied zwischen den folgenden:
Alle diese Abhängigkeitseigenschaften werden in der Selector- Klasse definiert . Ich verwechsle oft SelectedItem
mit SelectedValue
und SelectedValue
mit SelectedValuePath
.
Ich würde gerne den Unterschied zwischen ihnen kennen und auch, wann wir sie verwenden, insbesondere SelectedValue
und SelectedValuePath
. Bitte erläutern Sie deren Verwendung anhand einiger einfacher Beispiele.
Antworten:
Ihre Namen können etwas verwirrend sein :). Hier ist eine Zusammenfassung:
Die SelectedItem- Eigenschaft gibt das gesamte Objekt zurück, an das Ihre Liste gebunden ist. Angenommen, Sie haben eine Liste an eine Sammlung von
Category
Objekten gebunden (wobei jedes Kategorieobjekt die Eigenschaften Name und ID hat). z.B.ObservableCollection<Category>
. DieSelectedItem
Eigenschaft gibt Ihnen das aktuell ausgewählteCategory
Objekt zurück. Für Bindungszwecke ist dies jedoch nicht immer das, was Sie möchten, da Sie damit nur ein gesamtes Kategorieobjekt an die Eigenschaft binden können, an die die Liste gebunden ist, nicht den Wert einer einzelnen Eigenschaft für dieses Kategorieobjekt (z. B. dessenID
Eigenschaft) ).Daher haben wir die SelectedValuePath- Eigenschaft und die SelectedValue- Eigenschaft als alternative Bindungsmethode (Sie verwenden sie in Verbindung miteinander).
Product
Angenommen, Sie haben ein Objekt, an das Ihre Ansicht gebunden ist (mit Eigenschaften für Dinge wie Produktname, Gewicht usw.). Angenommen, Sie haben eineCategoryID
Eigenschaft für dieses Produktobjekt und möchten, dass der Benutzer eine Kategorie für das Produkt aus einer Liste von Kategorien auswählen kann. Sie müssen die ID-Eigenschaft des Category-Objekts derCategoryID
Eigenschaft im Product-Objekt zuweisen . Hier ist dasSelectedValuePath
und dasSelectedValue
Eigenschaften kommen herein. Sie geben an, dass die ID-Eigenschaft des Category-Objekts der Eigenschaft des Product-Objekts zugewiesen werden soll, an die die Liste gebunden istSelectedValuePath='ID'
, und binden dieSelectedValue
Eigenschaft dann an die Eigenschaft im DataContext (dh das Produkt).Das folgende Beispiel zeigt dies. Wir haben eine ComboBox, die an eine Liste von Kategorien gebunden ist (über ItemsSource). Wir binden die CategoryID-Eigenschaft für das Produkt als ausgewählten Wert (mithilfe der SelectedValue-Eigenschaft). Wir verknüpfen dies mit der ID-Eigenschaft der Kategorie über die SelectedValuePath-Eigenschaft. Und wir sagen, dass nur die Name-Eigenschaft in der ComboBox mit der DisplayMemberPath-Eigenschaft angezeigt wird.
Es ist anfangs etwas verwirrend, aber hoffentlich wird es dadurch etwas klarer ... :)
Chris
quelle
Um etwas konzeptioneller zu antworten:
SelectedValuePath
Definiert, welche Eigenschaft (anhand ihres Namens) der an die ListBox gebundenen ObjekteItemsSource
als Objekt verwendet wirdSelectedValue
.Zum Beispiel wird , wenn Ihre List - Box auf eine Sammlung von gebundenen
Person
Objekten, von denen jedem hatName
,Age
undGender
Eigenschaften,SelectedValuePath=Name
den Wert der ausgewählten verursachenPerson
‚s -Name
Eigenschaft in zurückgegeben werdenSelectedValue
.Beachten Sie, dass das ControlTemplate der ListBox (oder das Anwenden eines Stils), das angibt, welche Eigenschaft angezeigt werden soll,
SelectedValuePath
nicht verwendet werden kann , wenn Sie es überschreiben .SelectedItem
In der Zwischenzeit wird das gesamtePerson
aktuell ausgewählte Objekt zurückgegeben.(Hier ist ein weiteres Beispiel von MSDN mit TreeView.)
Update: Wie @Joe hervorhob, hat die DisplayMemberPath-Eigenschaft keine Beziehung zu den Selected * -Eigenschaften. Die richtige Beschreibung folgt:
Beachten Sie, dass sich diese Werte von denen unterscheiden
DisplayMemberPath
(die in ItemsControl und nicht in Selector definiert sind), diese Eigenschaft jedoch ein ähnliches Verhalten aufweist wieSelectedValuePath
: Wenn kein Stil / keine Vorlage vorhanden ist, gibt sie an, welche Eigenschaft des an das Element gebundenen Objekts als dessen verwendet werden soll Zeichenfolgendarstellung.quelle
SelectedItem
ist einobject
.SelectedValue
undSelectedValuePath
sindstring
s.Zum Beispiel mit der ListBox:
Wenn Sie "Gib mir" sagen,
listbox1.SelectedValue
wird der Text des aktuell ausgewählten Elements zurückgegeben.Wenn du sagst, gib mir
listbox1.SelectedItem
, dann bekommst du das gesamte Objekt.quelle
SelectedValue
ist auch einobject
und keinstring
. Pls sehen hierInspiriert von dieser Frage habe ich hier einen Blog zusammen mit dem Code-Snippet geschrieben . Nachfolgend einige Auszüge aus dem Blog
SelectedItem - Selected Item hilft dabei, den tatsächlichen Wert aus der anzuzeigenden DataSource zu binden. Dies ist vom Typ Objekt und wir können jeden vom Objekttyp abgeleiteten Typ mit dieser Eigenschaft binden. Da wir in diesem Fall die MVVM-Bindung für unsere Kombinationsfelder verwenden, ist dies die Eigenschaft, mit der wir VM benachrichtigen können, dass das Element ausgewählt wurde.
SelectedValue und SelectedValuePath - Dies sind die beiden verwirrendsten und falsch interpretierten Eigenschaften für Combobox. Diese Eigenschaften werden jedoch behoben, wenn wir unsere Combobox mit dem Wert eines bereits erstellten Objekts verknüpfen möchten. Bitte überprüfen Sie mein letztes Szenario in der folgenden Liste, um eine kurze Vorstellung von den Eigenschaften zu erhalten.
quelle
Jedes Steuerelement, das Sammlungen zum Speichern von Daten verwendet, verfügt über die SelectedValue- und SelectedItem-Eigenschaft. Beispiele für diese Steuerelemente sind ListBox, Dropdown, RadioButtonList, CheckBoxList.
Um genauer zu sein, wenn Sie buchstäblich den Text des ausgewählten Elements abrufen möchten, können Sie Folgendes schreiben:
Ihre ListBox1 kann auch Text mithilfe der SelectedValue-Eigenschaft zurückgeben, wenn der Wert zuvor festgelegt wurde. Aber oben ist effektiver, um Text zu bekommen.
Der Wert ist für den Benutzer nicht sichtbar, wird jedoch hauptsächlich zum Speichern in der Datenbank verwendet. Wir fügen keinen Text von ListBox1 ein, können ihn jedoch auch einfügen, aber wir haben den Wert des ausgewählten Elements eingefügt. Um Wert zu erhalten, können wir verwenden
Quelle
quelle