WPF: liaison de données TextBox simple

J’ai cette classe:

public partial class Window1 : Window { public Ssortingng Name2; public Window1() { InitializeComponent(); Name2 = new Ssortingng('a', 5); myGrid.DataContext = this; } // ... } 

Et je veux afficher la chaîne Name2 dans la zone de texte.

    

Mais la chaîne n’est pas affichée. De plus, si la chaîne Name2 est mise à jour périodiquement à l’aide d’un TimerCallback , dois-je faire quelque chose pour m’assurer que la zone de texte est mise à jour lorsque les données changent?

    Name2 est un champ. WPF se lie uniquement aux propriétés. Changez le pour:

     public ssortingng Name2 { get; set; } 

    Soyez averti que, avec cette implémentation minimale, votre TextBox ne répondra pas aux modifications de programme apscopes à Name2. Donc, pour votre scénario de mise à jour du minuteur, vous devez implémenter INotifyPropertyChanged:

     partial class Window1 : Window, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; // usual OnPropertyChanged implementation private ssortingng _name2; public ssortingng Name2 { get { return _name2; } set { if (value != _name2) { _name2 = value; OnPropertyChanged("Name2"); } } } } 

    Vous devriez envisager de déplacer cela vers un object de données distinct plutôt que sur votre classe Window.

    Votre fenêtre n’implémente pas les notifications de liaison de données nécessaires à la grid pour l’utiliser en tant que source de données, à savoir l’interface INotifyPropertyChanged .

    Votre chaîne “Name2” doit également être une propriété et non une variable publique, car la liaison de données est utilisée avec les propriétés.

    L’implémentation des interfaces nécessaires à l’utilisation d’un object en tant que source de données est disponible ici .

    Juste pour les besoins futurs.

    Dans Visual Studio 2013 avec .NET Framework 4.5, pour une propriété de fenêtre, essayez d’append ElementName=window pour le faire fonctionner.