2009-07-17 7 views
0

Lorsque je lier une propriété dans le modèle de vue enfant à TextBox la source ne sera pas mise à jour quel que soit le mode défini sur la liaison.Problème de liaison de données WPF (MVVM)

Le code XAML est comme ceci:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay}"/> 

Llorsque la vue chargée, la requête du système de liaison la fois la propriété CashPaid. mais chaque fois que le texte est édité, la valeur ne mettra pas à jour la source. Je dois manquer quelque chose ici ou le système de liaison de données WPF ne supporte pas ce type de liaison.

+0

Vous ne savez pas exactement ce qui est édité - le texte dans la zone de texte ou le texte dans la propriété CashPaid. – Will

+0

le texte dans la zone de texte est éditer par l'utilisateur. –

Répondre

1

Par défaut, TextBox ne mettra à jour la source de la liaison que lorsque le focus quittera le contrôle. Si vous définissez UpdateSourceTrigger à PropertyChanged, la propriété sera mis à jour les types d'utilisateurs:

<TextBox Text="{Binding Path=OrderDetail.CashPaid, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 
+0

Oui, j'essaie de mettre à jour UpdateSourceTrigger = PropertyChanged, pas de chance. –

2

Vous devez également vous assurer OrderDetail implémente INotifyProperty changé et assurez-vous que votre propriété CashPaid est averti lorsqu'il change. Voir le document MSDN pour plus d'informations sur celui-ci.

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

+1

Voir aussi "Comment: implémenter l'interface INotifyPropertyChanged": http://msdn.microsoft.com/en-us/library/ms229614.aspx –

+0

Oui, l'interface INotifyProperty est implémentée et déclenche l'événement au niveau du setter. pour la liaison régulière, par ex. Il suffit de lier à la propriété datacontext/viewmodel actuelle, cela fonctionne très bien. la seule différence est où la propriété réside. J'essaie même de définir le dataContext sur la zone de texte à OrderDetail et de définir la liaison de texte normalement, ne fait aucune différence. –

+0

Dans ce cas, essayez de définir BindsDirectlyToSource = true et voir si cela change quelque chose. En outre, la propriété CashPaid est-elle une chaîne? Sinon, il ne peut pas lier TwoWay sans IValueConverter. –

0

Utilisez Snoop pour vérifier si vous avez une erreur sur les liaisons de la propriété text TextBox. La plupart du temps, vous pouvez avoir une bonne idée de ce qui se passe vraiment quand vous l'utilisez

Questions connexes