在上一篇文章中,我们看到了 TextBox 中的更改如何不会立即发送回源。相反,只有在 TextBox 上失去焦点后才更新源。此行为由名为UpdateSourceTrigger的绑定上的属性控制。它默认为值“默认”,这基本上意味着根据您绑定到的属性更新源。在撰写本文时,除了 Text 属性之外的所有属性都会在属性更改时更新 (PropertyChanged),而 Text 属性会在失去对目标元素的关注时更新 (LostFocus)。
显然,默认值是 UpdateSourceTrigger 的默认值。其他选项是PropertyChanged、LostFocus和 Explicit。前两个已经描述过,而最后一个只是意味着更新必须手动推送才能发生,使用对 Binding 的 UpdateSource 调用。
为了了解所有这些选项是如何工作的,我更新了上一章的示例以向您展示所有这些选项:
<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataContextSample" Height="130" Width="310">
<StackPanel Margin="15">
<WrapPanel>
<TextBlock Text="Window title: " />
<TextBox Name="txtWindowTitle" Text="{Binding Title, UpdateSourceTrigger=Explicit}" Width="150" />
<Button Name="btnUpdateSource" Click="btnUpdateSource_Click" Margin="5,0" Padding="5,0">*</Button>
</WrapPanel>
<WrapPanel Margin="0,10,0,0">
<TextBlock Text="Window dimensions: " />
<TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
usi