10
votes

WPF Databinding avec un objet de collection

J'ai une classe simple telle que définie ci-dessous: xxx pré>

stocké dans une base de données et à travers un peu plus de code que je l'ai mis dans un objet d'observablecollection pour tenter de Databind dans WPF plus tard ON: P>

lstPeople.DataContext = objPeople;


0 commentaires

3 Réponses :


9
votes

Vous étiez si proche. XXX

La seule autre chose dont vous avez besoin est de savoir comment appliquer une vue pour chaque élément de votre collection. Aucun problème. Je n'utiliserai pas une liste de liste ... Je vais simplement utiliser un articleControl car il est un peu plus simple. xxx

C'est à peu près. La stratégie est la même pour une liste de réception, mais vous devez simplement fournir un peu plus de XAML pour fournir des en-têtes et des trucs de colonne. Je ne suis pas sûr à 100% d'avoir besoin de cela pour le moment, je l'ai donc laissé dehors.

edit: Voici une méthode d'extension pour "addrange" qui fera ce que tu es essayer de faire en sous-classement observablecollection. Peu plus facile ... surtout si vous vous retrouvez avec beaucoup de types de collecte (vous le ferez) xxx

alors vous pouvez simplement faire: xxx < / pré>


0 commentaires

1
votes

@anderson m'a battue en quelques secondes, ma réponse était très similaire.

Une chose que je vais ajouter si: il n'est pas nécessaire de définir un nouveau type de collection qui hérite de l'observablecollection, vous pouvez plutôt faire cela: < / p> xxx

La seule fois que vous souhaitez prolonger, c'est si vous allez faire quelque chose de différent ou de fantaisie avec elle, que vous ne semblez pas faire.


2 commentaires

L'OP a voulu un type de méthode "addrange" pour sa collection. Je l'ai souvent souhaité moi-même sur des observations observables. Je peux voir pourquoi tu ferais ça. J'ai écrit des éthorthodes pour faire la même chose.


@Anderson - Ouais sur le premier coup d'œil Tout ce que j'ai vu, c'est la fonction Ajouter , lorsque vous l'avez mentionné, j'ai regardé à nouveau et j'ai vu le paramètre qu'il y avait transmis.



1
votes

La réponse «Anderson IMES» est correcte (UPVote), bien que j'ai deux remarques:

Premièrement, si vous n'avez besoin que d'afficher une propriété d'un objet, je pense qu'il est plus facile et plus propre d'utiliser Listbox code> au lieu de listview code>, car le code de liaison de la propriété sera réduit à p> xxx pré>

second, si vous utilisez WPF et la liaison , assurez-vous que vos objets implémentent inotifypropertychanged forts>, de sorte que les modifications soient toujours synchronisées entre l'interface utilisateur et les objets. P>

public class Person : INotifyPropertyChanged
{
    int _id;
    string _name;

    public Person()
    { }

    public int ID
    {
        get { return _id; }
        set { 
             _id = value; 
             RaisePropertyChanged("ID");
            }
    }

    public string Name
    {
        get { return _name; }
        set { 
             _name = value;  
             RaisePropertyChanged("Name");
            }
    }

    pivate void RaisePropertyChanged(string propName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
    }

}


1 commentaires

Merci pour le conseil; D'autres googles me conduisent à croire que vous avez raison et que je devrai mettre en œuvre InotinyPropertychangned dans mon code. Merci pour l'information!