WPF grille de données de liaison à la liste des problèmes
J'ai une liste d'objets personnalisés: dire les Fruits avec deux propriétés de la chaîne de Nom et de la Couleur. Ces derniers sont dans une Liste.
private readonly List<Fruit> fruitList = new List<Fruit>();
Puis-je charger des fruits d'objets dans la liste.
Je suis en train d'essayer de lier cette liste de WPF Datagrid:
C#:
dgFruit.ItemsSource = "{Binding}";
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding Path=fruitList}" >
<toolkit:DataGrid.Columns>
<toolkit:DataGridComboBoxColumn
Header="Name"
SelectedValueBinding="{Binding Path=Name}"
TextBinding="{Binding Path=Name}" Width="5*" />
<toolkit:DataGridComboBoxColumn
Header="Color"
SelectedValueBinding="{Binding Path=Color}"
TextBinding="{Binding Path=Color}" Width="5*" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
Raison, ils sont dans une zone de liste déroulante est parce que je veux que l'utilisateur puisse modifier la relation. Ce n'est pas l'exemple réel, mais vous obtenez l'idée. Dire pour le bien de l'exemple le fruit n'était pas mûr pour qu'ils changent de Banane de la couleur au vert 🙂
Je ne suis pas du tout avoir la chance d'obtenir ces éléments dans la grille de données... et en bas de la piste, je veux un clic sur l'élément dans le datagridcell pour changer de zone de liste déroulante et afficher tous les possibles de types de Noms de Fruits et de Couleurs (de sorte qu'ils peuvent changer les relations)
Ici est une erreur que je reçois:
System.Windows.Data Error: 39 : BindingExpression path error: 'Color' property not found on 'object' ''Char' (HashCode=6750311)'. BindingExpression:Path=Color; DataItem='Char' (HashCode=6750311); target element is 'TextBlockComboBox' (Name=''); target property is 'Text' (type 'String')
Peut aider quelqu'un? La raison pour laquelle je suis en train de ma colonnes en xaml, afin que je puisse régler la largeur de star taille et les colonnes de largeur égale.
Je vois la plupart des exemples d'utilisation d'une ObservableCollection mais si je peux les lier à la liste pourquoi dois-je utiliser?
S'il vous plaît laissez-moi savoir si mon exemple, exige des précisions
Edit: ce que j'ai maintenant:
XAML:
<toolkit:DataGrid Name="dgFruit"
ItemsSource="{Binding}"
AutoGenerateColumns="False">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn
Header="Name"
Width="5*"/>
<toolkit:DataGridComboBoxColumn
Header="Color"
Width="5*"/>
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
C#:
DataContext = fruitList;
En fait quand j'utilise DataContext je n'ai pas les éléments. Lorsque j'utilise ItemSource-je obtenir des lignes vides, mais le nombre correct de lignes si cela semble de plus en plus dans le bon sens.
Je peux obtenir les données pour voir si je le laisse générer automatiquement des colonnes. Si j'ai mis autogeneratecolumns false, puis de spécifier mes colonnes en xaml comme je veux utiliser étoiles de dimensionnement, - je obtenir le bon nombre de colonnes, mais aucun texte!
OriginalL'auteur baron | 2010-01-25
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ceci:
doit définir la source des éléments d'une chaîne de caractères contenant le mot de Liaison entre deux accolades. Ce n'est presque certainement pas ce que vous voulez (en fait, si vous faites cela, vous devriez vous retrouver avec une grille de neuf lignes, une pour chaque caractère de la chaîne!). Vous pouvez définir la ItemsSource dans le code XAML, ou le code derrière, mais vous ne devriez pas faire les deux. Essayez ce qui suit:
Et puis dans votre visual constructeur:
Maintenant le contexte de données pour l'ensemble de votre visuel est la Liste<Fruits>, et le ItemsSource de votre réseau est configuré pour être le même objet. Je suppose ici que fruitList est un champ visuel lui-même.
Les liaisons pour vos colonnes devrait ressembler à quelque chose comme:
Où AllColors est défini comme une ressource (dans ce cas):
Cela devrait vous obtenir a commencé.
Vous pouvez désactiver l'auto-générés. Sur votre grille de données dans le code XAML: AutoGenerateColumns="False"
se rapprocher, maintenant pas d'éléments montrent que 🙁 voir la récente édition
Voir édité répondre
Merci! Je ne sais pas comment je n'ai pas testé l'autre jour essayé comme un millier de variations, mais qui l'a eu. Pense que j'ai probablement besoin de lire un peu plus sur la liaison de données.
OriginalL'auteur lesscode
WPF ne prend pas en charge la liaison aux champs. Créer une propriété qui accède à
fruitList
et de se lier à qui.Utilisation
dgFruit.DataContext = this;
au lieu dedgFruit.ItemsSource = "{Binding}";
Et si vous souhaitez afficher dans une zone de liste déroulante, vous avez besoin de lier ces DataGridComboBoxColumn à une liste de couleurs, pas seulement une chaîne de caractères. Par exemple, votre classe pourrait ressembler
Et vous pouvez utiliser un
List
si vous le souhaitez. L'avantage deObservableCollection
est-il implémente déjàINotifyCollectionChanged
etINotifyPropertyChanged
pour vousOriginalL'auteur kenwarner