2009-07-22 9 views
7

J'ai deux zones de texte, une pour un champ d'adresse de facturation et une pour un champ d'adresse d'expédition. Lorsque l'utilisateur tape quelque chose dans le texte de l'adresse de facturation boîte la zone de texte adresse d'expédition obtient la même valeur en raison du scénario de liaison suivante:WPF MultiBinding

<TextBox Name="txtBillingAddress" Text="{Binding BillingAddress, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" /> 

<TextBox Name="txtShippingAddress"> 
    <TextBox.Text> 
     <MultiBinding Converter="{StaticResource AddressConverter}"> 
     <Binding ElementName="txtBillingAddress" Path="Text" Mode="OneWay" /> 
     <Binding Path="ShippingAddress" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" /> 
     </MultiBinding> 
    </TextBox.Text> 
</TextBox> 

Cela fonctionne bien jusqu'à un certain point. Je souhaite également que l'adresse de livraison soit liée à l'entité de ma base de données en tant qu'adresse de facturation. Mon problème est que pendant que la zone de texte Adresse de livraison est remplie avec ce qui est tapé dans l'adresse de facturation, la méthode ConvertBack n'est pas déclenchée pendant que cela se produit. Il est uniquement déclenché si quelque chose est tapé directement dans la zone de texte de l'adresse de livraison.

Qu'est-ce qui me manque?

+0

Vouliez-vous dire mettre txtBillingAddress? –

+0

Oui, désolé pour la confusion. Ma situation est un peu plus complexe donc je ne pouvais pas faire une copie directe + coller. – David

Répondre

5

Peut-être que ce serait plus facile à implémenter dans votre ViewModel? Où le contrôle txtAddress réside-t-il dans votre MultiBinding?

public string BillingAddress{ 
    set{ 
     billingAddress = value; 
     firePropertyChanged("BillingAddress"); 
     if(string.isNullOrEmpty(ShippingAddress) 
     { 
      ShippingAddress = value; //use the property to ensure PropertyChanged fires 
     } 
    } 
    get{ return billingAddress; } 
} 
+0

Cela fonctionne bien. Merci. – David

Questions connexes