none
Tableau Binding (propriétés) RRS feed

  • Question

  • Bonsoir,

    J'aimerais avoir un conseil de personnes bien plus experte que moi-même. Je me retrouve actuellement avec 2 fois 10 mêmes champs dans une classe Patient (cAngleMaxMouvement"i" et cAngleMinMouvement"i") et par conséquent 10 propriétés (AngleMaxMouvement"i" et AngleMinMouvement"i")

    Serait-il possible de faire une propriété avec un tableau plutôt que champs. Par exemple cAngleMaxMouvement[0] correspond au premier mouvement et cAngleMaxMouvement[10] au dixième et de faire du Binding avec la propriété Text d'un texbox (exemple Binding : Path="cAngleMaxMouvement[10]")

    Merci d'avance pour votre aide et temps consacré

    mardi 21 avril 2015 20:34

Réponses

  • Bonjour,

    Vos liste d'informations doivent être une propriété de votre classe Patient (si c'est votre modèle de binding).

    Comme vous voulez du Two Way alors il va falloir émettre des notifications dés qu'une valeur change, donc que je l'ai précisé dans mon poste précédent, soit vous créez une classe qui supporte INotifyPropertyChange pour gérer vos tableaux de données, soit vous "trichez" avec ObservableCollection<T> qui a l'avantage d'intégrer toutes les mécaniques pour le binding, ca pourrait ressembler à quelque chose comme ca pour votre classe.

    public class Patient // : ...
    {
    
        public Patient()
        {
            AngleMaxMouvement = new ObservableCollection<double>();
            AngleMinMouvement = new ObservableCollection<double>();
            // Charger les valeurs de vos tableaux
            for (int i = 0; i < 10; i++)
            {
                AngleMaxMouvement.Add(i);
                AngleMinMouvement.Add(i);
            }
        }
    
        // ...
    
        public ObservableCollection<Double> AngleMaxMouvement { get; private set; }
        public ObservableCollection<Double> AngleMinMouvement { get; private set; }
    }
    

    Et pour votre binding sur la troisième valeur de AngleMaxMouvement :

    <TextBox Text="{Binding Path=AngleMaxMouvement[2], Mode=TwoWay}" />
    

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse CC307 mercredi 22 avril 2015 12:19
    mercredi 22 avril 2015 08:39

Toutes les réponses

  • Bonsoir,

    Vous pouvez parfaitement utiliser un tableau (ou liste) comme source de binding (en WPF en tout cas), les expressions de binding supportent la syntaxe "Property[x]".

    La question réside dans votre besoin de notification du binding (One Way ou Two Way), si c'est le cas vous devrez créer une sorte de tableau observable (implémentant INotifyPropertyChanged).

    Si vous n'avez pas envie de vous ennuyer avec ça vous pouvez utiliser une ObservableCollection<>() avec le bon nombre d'éléments, c'est peut-être un peu la grosse artillerie, mais ça fonctionne plutôt bien.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    mardi 21 avril 2015 21:34
  • Bonjour, 

    Je vous remercie pour votre réponse. J'utilise WPF et il s'agirait d'un mode Two Way pour le Binding (lecture et écriture).

    J'ai du mal avec la syntaxe, dois-je créer une nouvelle classe pour la list, ou puis-je la mettre dans ma classe Patient existante  ?

    Merci d'avance

    mercredi 22 avril 2015 07:15
  • Bonjour,

    Vos liste d'informations doivent être une propriété de votre classe Patient (si c'est votre modèle de binding).

    Comme vous voulez du Two Way alors il va falloir émettre des notifications dés qu'une valeur change, donc que je l'ai précisé dans mon poste précédent, soit vous créez une classe qui supporte INotifyPropertyChange pour gérer vos tableaux de données, soit vous "trichez" avec ObservableCollection<T> qui a l'avantage d'intégrer toutes les mécaniques pour le binding, ca pourrait ressembler à quelque chose comme ca pour votre classe.

    public class Patient // : ...
    {
    
        public Patient()
        {
            AngleMaxMouvement = new ObservableCollection<double>();
            AngleMinMouvement = new ObservableCollection<double>();
            // Charger les valeurs de vos tableaux
            for (int i = 0; i < 10; i++)
            {
                AngleMaxMouvement.Add(i);
                AngleMinMouvement.Add(i);
            }
        }
    
        // ...
    
        public ObservableCollection<Double> AngleMaxMouvement { get; private set; }
        public ObservableCollection<Double> AngleMinMouvement { get; private set; }
    }
    

    Et pour votre binding sur la troisième valeur de AngleMaxMouvement :

    <TextBox Text="{Binding Path=AngleMaxMouvement[2], Mode=TwoWay}" />
    

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse CC307 mercredi 22 avril 2015 12:19
    mercredi 22 avril 2015 08:39
  • Je vous remercie beaucoup pour vos explications et exemple de code

    Bonne journée

    mercredi 22 avril 2015 12:19