Jaka jest różnica między następującymi elementami:
Wszystkie te właściwości zależności są zdefiniowane w klasie Selector . Często mylę się SelectedItem
z SelectedValue
i SelectedValue
zSelectedValuePath
.
Chciałbym poznać różnicę między nimi, a także kiedy ich używamy, zwłaszcza SelectedValue
i SelectedValuePath
. Wyjaśnij ich użycie za pomocą kilku prostych przykładów.
Odpowiedzi:
Ich nazwy mogą być nieco mylące :). Oto podsumowanie:
Właściwość SelectedItem zwraca cały obiekt, z którym związana jest lista. Powiedzmy, że powiązałeś listę z kolekcją
Category
obiektów (każdy obiekt kategorii ma właściwości Nazwa i identyfikator). na przykład.ObservableCollection<Category>
.SelectedItem
Własność zwróci ci aktualnie zaznaczonegoCategory
obiektu. Jednak do celów wiązania nie zawsze jest to pożądane, ponieważ umożliwia jedynie powiązanie całego obiektu kategorii z właściwością, do której jest powiązana lista, a nie wartości pojedynczej właściwości tego obiektu kategorii (np. JegoID
właściwości ).Dlatego mamy właściwość SelectedValuePath i SelectedValue jako alternatywny sposób wiązania (używasz ich w połączeniu ze sobą). Załóżmy, że masz
Product
obiekt, z którym związany jest Twój widok (z właściwościami takimi jak nazwa produktu, waga itp.). Załóżmy również, że maszCategoryID
właściwość tego obiektu produktu i chcesz, aby użytkownik mógł wybrać kategorię produktu z listy kategorii. Potrzebujesz właściwości ID obiektu Category, aby zostać przypisanym doCategoryID
właściwości obiektu Product. To gdzieSelectedValuePath
iSelectedValue
właściwości wchodzą. Określasz, że właściwość ID obiektu Category powinna być przypisana do właściwości obiektu Product, do którego lista jest zobowiązanaSelectedValuePath='ID'
, a następnie powiążSelectedValue
właściwość do właściwości w DataContext (tj. produkt).Poniższy przykład to pokazuje. Mamy ComboBox powiązany z listą kategorii (poprzez ItemsSource). Wiązujemy właściwość CategoryID na produkcie jako wybraną wartość (za pomocą właściwości SelectedValue). Odnosimy to do właściwości identyfikatora kategorii za pośrednictwem właściwości SelectedValuePath. Mówimy tylko o wyświetlaniu właściwości Name w ComboBox z właściwością DisplayMemberPath).
Na początku jest to trochę mylące, ale mam nadzieję, że to sprawia, że jest trochę jaśniej ... :)
Chris
źródło
Aby odpowiedzieć trochę bardziej koncepcyjnie:
SelectedValuePath
określa, która właściwość (po nazwie) obiektów powiązanych z ListBoxItemsSource
zostanie użyta jako pozycjaSelectedValue
.Na przykład, jeśli Twój ListBox jest związany z kolekcji
Person
obiektów, z których każdy maName
,Age
iGender
właściwościSelectedValuePath=Name
spowoduje, że wartość wybranegoPerson
„sName
własności zostać zwrócone wSelectedValue
.Zauważ, że jeśli przesłonisz ControlTemplate ListBox (lub zastosujesz styl), który określa, jaka właściwość powinna być wyświetlana,
SelectedValuePath
nie będzie można użyć.SelectedItem
w międzyczasie zwraca całośćPerson
aktualnie wybrany obiekt.(Oto kolejny przykład z MSDN przy użyciu TreeView)
Aktualizacja: Jak wskazał @Joe, właściwość DisplayMemberPath nie jest powiązana z właściwościami Selected *. Prawidłowy opis jest następujący:
Zauważ, że wartości te różnią się od
DisplayMemberPath
(które są zdefiniowane w ItemsControl, nie w Selector), ale ta właściwość ma podobne zachowanieSelectedValuePath
: w przypadku braku stylu / szablonu określa, która właściwość obiektu powiązanego z elementem powinna być użyta jako jego reprezentacja ciągu.źródło
SelectedItem
jestobject
.SelectedValue
iSelectedValuePath
sąstring
s.na przykład za pomocą ListBox:
jeśli powiesz „daj mi”
listbox1.SelectedValue
, zwróci tekst aktualnie wybranego elementu.jeśli powiesz: daj mi
listbox1.SelectedItem
, da ci cały przedmiot.źródło
SelectedValue
jest równieżobject
i niestring
. Pls patrz tutajzainspirowany tym pytaniem napisałem tutaj blog wraz z fragmentem kodu . Poniżej znajdują się niektóre fragmenty bloga
SelectedItem - Selected Item pomaga powiązać rzeczywistą wartość ze źródła danych, które zostanie wyświetlone. Jest to obiekt typu i za pomocą tej właściwości możemy powiązać dowolny typ pochodzący z typu obiektu. Ponieważ w tym przypadku będziemy używać powiązania MVVM dla naszych pól kombi, jest to właściwość, której możemy użyć, aby powiadomić maszynę wirtualną o tym, że element został wybrany.
SelectedValue i SelectedValuePath - są to dwie najbardziej mylące i źle interpretowane właściwości combobox. Ale te właściwości przychodzą na ratunek, gdy chcemy powiązać nasz combobox z wartością z już utworzonego obiektu. Proszę sprawdzić mój ostatni scenariusz na poniższej liście, aby uzyskać krótki pogląd na temat właściwości.
źródło
Każda kontrolka korzystająca z kolekcji do przechowywania danych ma właściwość SelectedValue, SelectedItem. Przykładami takich formantów są ListBox, Dropdown, RadioButtonList, CheckBoxList.
Aby być bardziej szczegółowym, jeśli dosłownie chcesz pobrać tekst wybranego elementu, możesz napisać:
Twój ListBox1 może również zwracać tekst za pomocą właściwości SelectedValue, jeśli wcześniej ustawiono taką wartość. Ale powyżej jest bardziej skuteczny sposób na uzyskanie tekstu.
Teraz wartość jest niewidoczna dla użytkownika, ale służy głównie do przechowywania w bazie danych. Nie wstawiamy tekstu ListBox1, ale możemy go również wstawić, ale użyliśmy do wstawienia wartości wybranego elementu. Aby uzyskać wartość, możemy użyć
Źródło
źródło