Domanda

Voglio avere un controllo utente che prende una raccolta di Persone (proprietà "Dati") e li visualizza in una casella di riepilogo. Quando eseguo la mia app non viene visualizzato nulla nella casella di riepilogo. Puoi per favore sottolineare cosa sto facendo di sbagliato? Grazie !!!

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public override string ToString()
    {
        return Name + "(" + Age + ")";
    }
}

Controllo utente: (Uc1.xaml.cs)

public partial class uc1
{
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof (List<Person>), typeof (uc1));

    public List<Person> Data
    {
        get { return (List<Person>) GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }

    public uc1()
    {
        InitializeComponent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        DataContext = Data;
    }
}

(uc1.xaml)

<ListBox ItemsSource="{Binding Name}" />
È stato utile?

Soluzione

La proprietà ItemsSource controlla l'elenco di elementi visualizzati nella casella di riepilogo. Se si desidera che ListBox visualizzi una riga per ogni persona, è necessario impostare ItemsSource in modo che si associ direttamente a DataContext. Quindi si utilizza la proprietà DisplayMemberPath per controllare quale proprietà della classe Person mostrare.

Ecco il mio codice di esempio che funziona per me. La classe persona è la stessa.

Window1.xaml.cs:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        List<Person> Data = new List<Person>();
        Data.Add(new Person { Name = "Test 1", Age = 5 });
        Data.Add(new Person { Name = "Test 2", Age = 10 });
        this.DataContext = Data;
    }
}

Window1.xaml

<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top