This is a property on a binding that controls the data flow from target to the source and used in two-way databinding
scenarios. The default mode is when focus changes but there are number of other
options available, which we will see in this article.
Let’s talk about some of the data trigger scenarios. By default, modified values in the binding
controls only get pushed down when we do activity related to focus change like
tab out, minimizing and maximizing window, etc.
· In some scenarios we want to update values as
quickly as possible, or let’s say with every key stoke. So, to achieve such kind of scenarios Microsoft provided UpdateSourceTrigger.
Properties available with UpdateSourceTrigger:
- Default – This is the default value and it means a lost focus for most of the controls
- LostFocus – Value updation will be on hold until the focus moves out of control
- PropertyChanged – Value updation will happen whenever a target property changes. It usually happen on every key stoke
- Explicit - Used to defer source updates until user do it forcibly by click on any button or so.
Default and LostFocus mean the same thing for most of
the controls with a exception of DataGrid. For DataGrid:
o Lost Focus: Cell lost focus
o Default: Row lost focus
Now let’s have a look at the example and sample code:
<Grid>
.........
<TextBlock Text="Source:" Width="auto"/>
<TextBox Name="SourceText" Width="160" Height="30" Margin="48,0,44,82" />
<TextBlock Text="Target:" Grid.Column="1" Width="auto"/>
<TextBox Name="TargetText" Width="160" Height="30"
Grid.Column="1" Margin="44,0,47,82" />
</Grid>
In above code I am creating 2 TextBlocks and 2 TextBoxes, which will be
shown as:
Please note, as of now I haven’t done any binding on my textboxes. As a next step, let’s pick properties of UpdateSourceTrigger and see what each one of does.
Default: When user will change value in Source textbox, value will
automatically get updated in Target textbox. BUT when user will modify value in
Target textbox, it won’t reflect in Source textbox, until lost focus happens.
Code:
<Grid>
.......
<TextBlock Text="Source:" Width="auto"/>
<TextBox Name="SourceText" Width="160" Height="30" Margin="48,0,44,82" />
<TextBlock Text="Target:" Grid.Column="1" Width="auto"/>
<TextBox Name="TargetText" Width="160" Height="30"
Text="{Binding ElementName=SourceText, Path=Text,UpdateSourceTrigger=Default}"
Grid.Column="1" Margin="44,0,47,82" />
</Grid>
Output:
When user types in Source TextBox :
When user types in Target TextBox :
LostFocus: As I mentioned earlier, except DataGrid, LostFocus behaves
same for all the controls as Default property.
Code:
<Grid>
.......
<TextBlock Text="Source:" Width="auto"/>
<TextBox Name="SourceText" Width="160" Height="30" Margin="48,0,44,82" />
<TextBlock Text="Target:" Grid.Column="1" Width="auto"/>
<TextBox Name="TargetText" Width="160" Height="30"
Text="{Binding ElementName=SourceText, Path=Text,UpdateSourceTrigger=LostFocus}"
Grid.Column="1" Margin="44,0,47,82" />
</Grid>
Output:
Here output will be same as above case (Default) as it is TextBox.
PropertyChanged: If UpdateSourceTrigger property is set to
PropertyChanged, then everytime both Source and Target will be in sync. In
another words, updating Source TextBox will update Target TextBox on every key
stroke and same proves true if value is updated in Target TextBox.
Code:
<Grid>
.........
<TextBlock Text="Source:" Width="auto"/>
<TextBox Name="SourceText" Width="160" Height="30" Margin="48,0,44,82" />
<TextBlock Text="Target:" Grid.Column="1" Width="auto"/>
<TextBox Name="TargetText" Width="160" Height="30"
Text="{Binding ElementName=SourceText, Path=Text,UpdateSourceTrigger=PropertyChanged}"
Grid.Column="1" Margin="44,0,47,82" />
</Grid>
Output:
When user types in Source TextBox:
When user types in Target TextBox:
After reading this article, hope you got a clear understanding on
UpdateSourceProperty.
Enjoy learning !!!
Comments
Post a Comment