J'ai un objet personnalisé Foo avec une propriété booléenne appelée Marqué et quand quelqu'un réussit à taper quelque chose dans une zone de texte, il change de drapeau à vrai et met à jour un autre bloc de texte avec un peu de texte. Le problème est que je peux le faire travailler sur le chargement des données initiales mais rien ne se produit lorsque l'utilisateur tape avec succès quelque chose pour retourner le drapeau.WPF Mettre à jour l'implémentation du déclencheur source
Je dois faire la majorité de ceci dans le code derrière et j'ai implémenté INotifyPropertyChanged sur mon objet Foo. Quel est le problème avec mon code ci-dessous?
Merci.
private Border CreateNewBorder()
{
Border b = new Border();
TextBlock tb = new TextBlock();
tb.TextAlignment = TextAlignment.Center;
b.Style = (Style)this.FindResource("myBorder");
tb.SetBinding(TextBlock.TextProperty, CreateBinding());
b.Child = tb;
return b;
}
private Binding CreateBinding()
{
Binding bind = new Binding();
bind.Source = Foo;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
bind.Mode = BindingMode.TwoWay;
bind.Path = new PropertyPath("Flagged");
bind.Converter = new BoolToStringConverter();
return bind;
}
Avez-vous vérifié dans le débogueur que Flagged est défini sur true lorsque l'utilisateur tape? L'objet Foo est-il utilisé comme Source dans CreateBinding() la même instance que celle qui est mise à jour lorsque l'utilisateur tape? Pouvez-vous poster les bits pertinents du code Foo? – itowlson
Notez également qu'il n'est pas utile de définir un UpdateSourceTrigger (ou Mode = TwoWay) sur une liaison TextBlock.Text - l'utilisateur ne peut pas taper dans un TextBlock de sorte qu'il n'y aura jamais de mises à jour à repasser vers la source de liaison. – itowlson