8
votes

I have two text boxes, one for a billing address field and one for a shipping address field. When the user types something into the the billing address text box the shipping address text box gets the same value due to the following binding scenario:

<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>

This works fine up to a point. I also want the shipping address to be bound to my database entity as the billing address is. My problem is that while the shipping address text box is populated with what is typed in the billing address, the ConvertBack method is not fired while this is happening. It is only fired if something is typed directly into the shipping address text box.

What am I missing?

1
where does the txtAddress control reside in your MultiBinding? Did you mean to put txtBillingAddress?Jeff Wain
Yes, sorry for the confusion. My situation is a bit more complex so I couldn't do a direct copy+paste.David

1 Answers

5
votes

Maybe this would be easier to implement in your ViewModel?

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