WPF Databinding, um generische Liste<>
Bin ich etwas falsch .. Sie wissen, wie es ist.
Habe ich versucht das Spiel mit ItemsSource , DataContext , DisplayMemberPath und SelectedValuePath und ich erhalte entweder eine leere Liste, eine Liste die ToString-Methode aufgerufen wird, in der Person-Objekt;
WAS WIRKLICH HELFEN WÜRDE, ist jemand für das veröffentlichen einer Antwort, die funktioniert für dieses Beispiel.
Habe ich vereinfacht das problem, wie ich habe Schwierigkeiten, die im Allgemeinen mit databinding Generika.
Habe ich eine einfache Generische Liste von Personen und wollen, binden Sie es zu einem combo. (will auch versuchen, verwenden Sie ein ListView-Steuerelement zu).
Entweder ich bekomme eine Liste von Rohlingen oder eine Liste von " xxxx.Person', wobei xxxx = namespace
<Window x:Class="BindingGenerics.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="300">
<Grid>
<ComboBox Name="ComboBox1"
ItemsSource="{Binding}"
Height="50"
DisplayMemberPath="Name"
SelectedValuePath="ID"
FontSize="14"
VerticalAlignment="Top">
</ComboBox>
</Grid>
</Window>
using System.Windows;
using System.ComponentModel;
namespace BindingGenerics
{
///<summary>
///Interaction logic for MainWindow.xaml
///</summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Person p = new Person();
//I have tried List and BindingList
//List<Person> list = new List<Person>();
BindingList<Person> list = new BindingList<Person>();
p.Name = "aaaa";
p.ID = "1111";
list.Add(p);
p = new Person();
p.Name = "bbbb";
p.ID = "2222";
list.Add(p);
p = new Person();
p.Name = "cccc";
p.ID = "3333";
list.Add(p);
p = new Person();
p.Name = "dddd";
p.ID = "4444";
list.Add(p);
ComboBox1.DataContext = list;
}
}
public struct Person
{
public string Name;
public string ID;
}
}
- Ich habe versucht, Ihre Probe-und es funktioniert für mich. Außer, das zeigt dddd mehrere Male.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In deinem code-Beispiel, Person.Name ist ein Feld eher als eine Eigenschaft. WPF-Datenbindung, hält Sie nur die Eigenschaften, nicht die Felder, so dass Sie brauchen, um zu ändern, Person.Namen sein eine Eigenschaft.
Ändern Ihre Person Erklärung:
(Für Produktions-code, werden Sie wahrscheinlich wollen, verwenden Sie ein
ObservableCollection<Person>
eher als eineList<Person>
und entweder die Person unveränderlich oder machen es die INotifyPropertyChanged implementieren-aber das sind nicht die Quellen deiner unmittelbaren problem.)In der code angezeigt, den Sie beim festlegen der ItemsSource zweimal, das erste mal in XAML (genannt von InitializeComponent) an den DataContext der Bezeichnung "ComboBox1", kann nicht bestimmt werden von dem, was du gepostet hast, aber es ist wahrscheinlich nicht das, was Sie wollen. Nach, dass Sie ein Reset aus code, um Ihre list-Objekt (hier mit Tippfehler). In diesem code sind Sie auch durch die gleiche Instanz von Person 4-mal und ändern Sie einfach Ihren Namen und ID über und über. Ich vermute eine Kombination dieser Probleme und der Tatsache, dass Sie mit einer Liste anstelle von ObservableCollection sind, was die Probleme in Ihrer Anwendung.
Würde es helfen, einzugrenzen, wenn könnten Sie post einige aktuelle code, die Sie sehen, Probleme mit so was hast du hier gar nicht kompilierbar.
Gut... ich gehe davon aus, dass Ihre tatsächliche code korrigiert syntax, wie der code, den Sie einfügen, wird nicht kompiliert.
Ich diesen code in eine neue WPF-Anwendung und nach new-ing jede Person, Objekt, meiner combobox gefüllt Ordnung. Möchten Sie vielleicht bewegen Sie Ihre Bevölkerung-code in einem event Geladen, was eine form ist richtig konstruiert. Hier ist die korrigierte xaml und codebehind (mit ein paar syntax-Kurzbefehle):
xaml:
codebehind: