I have two textboxes which I want to keep synchronized i.e. the content of both the textboxes should be exactly same. If one textbox changes the other textbox content should be synchronized automatically and viceversa. I want to achieve it using WPF databinding facilities. I have the following code:
<Window x:Class="WPFLearning.DataBindingTwoWay"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataBindingTwoWay" Height="300" Width="300">
<Grid>
<StackPanel>
<TextBox x:Name="firstTextBox" Background="Silver"></TextBox>
<TextBox x:Name="secondTextBox" Background="Gold" ></TextBox>
</StackPanel>
</Grid>
</Window>
I tried using the Binding Markup Extensions but could not get it right. Here is how I specified Binding on the firstTextBox:
<TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Source=secondTextBox, Path=Text, Mode=TwoWay}"></TextBox>
Also, there are no runtime errors. What am I doing wrong?
If that is what you want to do, WPF will let you do it:
<Grid>
<StackPanel>
<TextBox x:Name="firstTextBox" Background="Silver" Text="{Binding Path=Text, ElementName=secondTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox x:Name="secondTextBox" Background="Gold" ></TextBox>
</StackPanel>
</Grid>
The ElementName
syntax is a very powerful addition to the basic approach of binding to properties in the DataContext
. Many crazy things become possible.
Are you sure you want to bind one textbox to another textbox? By doing this changing the text value in the other textbox would not affect the other (unless each textbox binds to the other, which sounds like a ridiculous thing to do).
The correct way to achieve this is to have both textboxes (or any number of textboxes, controls...etc) bind to a single Property. This property exists in the data-model and/or view-model.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With