WPF: liaison de données de zone de texte simple
, j'ai cette classe:
public partial class Window1 : Window
{
public String Name2;
public Window1()
{
InitializeComponent();
Name2 = new String('a', 5);
myGrid.DataContext = this;
}
// ...
}
Et je veux afficher la chaîne Name2
dans la zone de texte.
<Grid Name="myGrid" Height="437.274">
<TextBox Text="{Binding Path=Name2}"/>
</Grid>
Mais la chaîne n'est pas affichée. En outre, 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?
3 réponses
Name2 est un champ. WPF se lie uniquement aux propriétés. Changez-le en:
public string Name2 { get; set; }
Soyez averti qu'avec cette implémentation minimale, votre zone de texte ne répondra pas aux modifications programmatiques de Name2. Donc, pour votre scénario de mise à jour de la minuterie, vous devrez implémenter INotifyPropertyChanged:
partial class Window1 : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// usual OnPropertyChanged implementation
private string _name2;
public string Name2
{
get { return _name2; }
set
{
if (value != _name2)
{
_name2 = value;
OnPropertyChanged("Name2");
}
}
}
}
Vous devriez envisager de déplacer ceci vers un objet 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 que la grille nécessite pour l'utiliser comme source de données, à savoir l'interfaceINotifyPropertyChanged .
Votre chaîne" Name2 " doit également être une propriété et non une variable publique, car la liaison de données est à utiliser avec les propriétés.
L'implémentation des interfaces nécessaires à l'utilisation d'un objet comme source de données peut être trouvée ici.
Juste pour les besoins futurs.
Dans Visual Studio 2013 avec. NET Framework 4.5, pour une propriété de fenêtre, essayez d'ajouter ElementName=window
pour le faire fonctionner.
<Grid Name="myGrid" Height="437.274">
<TextBox Text="{Binding Path=Name2, ElementName=window}"/>
</Grid>