validar texto seleccionados seleccionado propiedades obtener metodos item datos como c# wpf listbox

texto - obtener el item seleccionado de un combobox c#



Cómo obtener una propiedad particular del artículo seleccionado en ListBox (2)

Tengo lo siguiente:

<ListBox SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding items}" DisplayMemberPath="s"/> <TextBlock Text="{Binding SelectedItem.s}"/>

Esta es la definición de SelectedItem

public MemEntity SelectedItem {get; set;}

MemEntity es una clase que contiene

public String s {get; get;}.

Básicamente, quiero que s del elemento seleccionado se muestre en TextBlock (la misma propiedad que se muestra en ListBox ). Esto no funciona, entonces ¿qué estoy haciendo mal?


Hay múltiples formas de hacer esto. Ya se ha proporcionado una opción en otra respuesta que se centra en lograr la funcionalidad deseada mediante el enlace a un elemento de vista. Aquí hay otra opción.

La vista no sabe que el elemento seleccionado ha cambiado. ver en el uso de INotifyPropertyChanged

Puede crear un ViewMode de base para encapsular la funcionalidad repetida

public abstract class ViewModelBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged = delegate { }; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }

Haga heredar los modelos de vista de esta clase base para que la vista tenga en cuenta los cambios cuando se vincula.

public class ItemsViewModel : ViewModelBase { public ItemsViewModel() { items = new ObservableCollection<MemEntity>(); } private MemEntity selectedItem; public MemEntity SelectedItem { get { return selectedItem; } set { if (selectedItem != value) { selectedItem = value; OnPropertyChanged(); //this will raise the property changed event. } } } public ObservableCollection<MemEntity> items { get; set; } }

La vista ahora tendrá en cuenta cuando la propiedad SelectedItem cambie y actualizará la vista en consecuencia.


Prueba esto,

<TextBlock ... Text="{Binding ElementName=items, Path=SelectedItem.s}" />

luego agrega un nombre a tu ListBox como,

<ListBox x:Name="items" SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding items}" DisplayMemberPath="s"/>