10
votes

Comment puis-je lier une observatoire à TextBoxes dans un magasin de données?

J'essaie de réussir à Twoway de lier une observation d'observaCollection aux zones de texte dans un fichier de données. Je peux obtenir les données à afficher correctement, mais je ne parviens pas à modifier les données de la liste via l'interface utilisateur. J'ai une classe modèle nommée 'modèle' qui contient une observablecollection nommée 'liste'. La classe implémente l'interface inotifypropertychanged. Voici le XAML pour la coquille. Le DataContext pour Window1's Grid est défini sur "thegrid.datacontext = modèle" xxx

Ceci est le code de la classe de modèle: xxx

Quelqu'un pourrait-il vous conseiller si je vais à ce sujet la bonne voie?


0 commentaires

3 Réponses :


13
votes

Vous avez besoin d'une propriété pour lier à deux sens, alors la chaîne n'est pas bonne pour cela.

Enveloppez-le dans un objet de chaîne, comme celui-ci: P>

<TextBox Text="{Binding Path=Value}" />


3 commentaires

Travaille pour moi! Merci beaucoup!!


Je ne pense pas que vous devez mettre "chemin =" dans la propriété de texte, text = "{la valeur de liaison}" fonctionnerait également


Pourquoi la propriété de cordon unique fonctionne-t-elle mais pas la liste ?



1
votes

Je crois que vous devez tirer vos éléments de collecte de dépendancesObject pour la liaison à Twoway au travail. Quelque chose comme: xxx

... xxx


3 commentaires

Je ne pense pas qu'une dépendancePropriété est requise dans ce cas. Cela n'est nécessaire que si vous voulez lier cette propriété à autre chose.


Basé sur les deux idées maintenant, j'ai pu proposer une solution pour ma demande. Merci pour votre commentaire!!


Cela m'a aidé beaucoup, merci. La partie que j'avais manquante était de définir le mode = Twoway afin que je puisse accéder aux données mises à jour de la listeBOX.ItemsSource après que l'utilisateur ait effectué leurs modifications.



0
votes

Vue XAML:

class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }

        private ObservableCollection<StringObject> _List = new ObservableCollection<StringObject>();
        public ObservableCollection<StringObject> List
        {
            get { return _List; }
            set
            {
                _List = value;
                NotifyPropertyChanged("List");
            }
        }

        public ViewModel()
        {
            List = new ObservableCollection<StringObject>
                {
                    new StringObject {Value = "why"},
                    new StringObject {Value = "not"},
                    new StringObject {Value = "these"}
                };
        }
    }

    public class StringObject
    {
        public string Value { get; set; }
    }


0 commentaires