Une liaison bidirectionnelle pour la zone de texte
Cette question a été posée ici pour des milliers de fois.
Mais vraiment, aucun de vos exemples et de réponses qui fonctionne pour moi.
Alors, permettez-moi de vous montrer mon code.
public class PlayList : INotifyPropertyChanged{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name) {
var handler = PropertyChanged;
if (handler != null) {
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
private string _dl;
public string DriveLetter {
get { return _dl; }
set {
if (value != _dl) {
_dl = value;
OnPropertyChanged("DriveLetter");
}
}
}
}
public partial class MainWindow : Window {
public PlayList playlist = new PlayList();
private void Window_Loaded(object sender, RoutedEventArgs e) {
Binding bind = new Binding("DriveLetter");
bind.Source = this.playlist;
bind.Mode = BindingMode.TwoWay;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
textBox1.SetBinding(TextBlock.TextProperty, bind);
this.playlist.DriveLetter = "A";
}
}
Bien sûr WPF ignore cette liaison (rien ne change quand je tape dans la zone de texte, et rien ne change quand je change de liste de lecture.Lettre de lecteur de la propriété.
Débogueur dit, que PropertyChanged gestionnaire n'est pas null
{Method = {Void OnPropertyChanged(System.Object, System.ComponentModel.PropertyChangedEventArgs)}}
Donc, les idées de ce que je fais de mal. (Je ne pas croire que WPF est mal)?
Merci d'avance!
Est-il une raison pourquoi vous êtes la construction de la liaison dans le code au lieu de XAML? Et avez-vous essayé d'utiliser des outils comme Snoop pour le débogage de l'liaisons, ou avez-vous essayé de définir des points d'arrêt dans votre propriété afin de voir si une exécution de code se passe là-bas?
Oui, il est tout à fait une bonne raison. Je veux utiliser la liste de lecture de l'objet plus tard dans le code.
Je ne dirais pas que c'est une bonne raison de le faire de cette façon.
Vous pouvez déclarer votre
Oui, il est tout à fait une bonne raison. Je veux utiliser la liste de lecture de l'objet plus tard dans le code.
Je ne dirais pas que c'est une bonne raison de le faire de cette façon.
Vous pouvez déclarer votre
Playlist
objet dans le code tout en le définissant comme le DataContext
de la TextBox
, ou tout simplement de fournir un bien pour cela que le XAML peut se référer pour cela à la source.OriginalL'auteur mszubart | 2011-12-07
Vous devez vous connecter pour publier un commentaire.
Changement
à
OriginalL'auteur Rayden
vous n'avez pas à le faire de cette façon, même si vous souhaitez utiliser votre liste de lecture plus tard.
Il suffit d'utiliser une Propriété dans votre Fenêtre comme:
et de Lier votre zone de texte comme ceci:
vous devez également définir le DataContext de la Fenêtre, je pense:
ou vous définissez le Contexte de Données de votre liste de lecture:
de sorte que la Liaison ressemble à ceci:
OriginalL'auteur bolia
changement
à
Vous êtes liaison
TextBlock's
texte à la propriété plutôt que deTexBox's
propriété textNe soyez pas ce qui se passe
OriginalL'auteur Haris Hasan