una significa que para imagenes imagen emplea como atributos atributo agregar c# winforms data-binding listbox bindingsource

c# - significa - Enlace a la propiedad anidada mostrando solo el primer elemento en la lista



que significa alt en una imagen (1)

Parece que al configurar DisplayMember en "NestedItem.Name" solo se muestra la propiedad NestedItem.Name de SelectedItem ; lo probé; si SelectedItem cambió, el Nombre que se muestra también cambió en consecuencia -. El trabajo más fácil es agregar otra propiedad para DisplayMember :

public class MyItem { public NestedItem NestedItem { get; set; } public int Number { get; set; } public String NestedItemName { get { return NestedItem.Name; } } }

Luego configure DisplayMember :

listBox1.DisplayMember = "NestedItemName";

No es elegante, pero es más fácil que usar el descriptor de propiedades como se sugiere aquí o aquí .

ACTUALIZAR:

Lo que sigue es una prueba rápida que hice. Agregue un botón para alternar listBox1''s DisplayMember . Onclick eventos Onclick :

listBox1.DisplayMember = (listBox1.DisplayMember == "Number") ? "NestedItem.Name" : "Number";

Cuando DisplayMember establece en "Número", puede elegir cualquier elemento de la lista, no necesariamente el primer elemento , y luego hacer clic en el botón nuevamente. Verá que SelectedItem''s NestedItem.Name muestra SelectedItem''s NestedItem.Name .

Estoy intentando vincular un Control ListBox en C # Winforms en .NET 4.5 a una lista de objetos que tienen una propiedad anidada que deseo usar para un DisplayMember. Funciona de alguna manera, excepto que cuando configuro DisplayMember en la propiedad anidada, el cuadro de lista solo muestra un elemento, aunque hay dos elementos en la lista a los que está vinculado. Si hago un comentario sobre el código para configurar DisplayMember, listBox muestra dos elementos. ¿Es esto un error en el marco? Me gustaría evitar agregar otra propiedad o reemplazar ToString () si puedo ya que estoy implementando MVP y me gustaría mantener mi lógica de vista aislada para mi vista. Aquí hay un código de ejemplo a continuación.

public partial class Form1 : Form { public Form1() { InitializeComponent(); var bindingSource = new BindingSource(); var listOfMyItems = new BindingList<MyItem> { new MyItem { Number = 1, NestedItem = new NestedItem { Name = "name1", Note = "note1" } }, new MyItem { Number = 2, NestedItem = new NestedItem { Name = "name2", Note = "note2" } }, }; bindingSource.DataSource = listOfMyItems; listBox1.DataSource = bindingSource; //comment out the line below and the listBox1 will show 2 items listBox1.DisplayMember = "NestedItem.Name"; } } public class NestedItem { public string Name { get; set; } public string Note { get; set; } } public class MyItem { public NestedItem NestedItem { get; set; } public int Number { get; set; } }