我试图更多地了解绑定延迟及其影响.我已经实现了一个简单的代码,但老实说,我最终没有注意到任何视觉差异,有或没有延迟.这是代码:
<Window x:Class="Example00.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid >
<Grid.RowDefinitions >
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<TextBox Name="mySourceElement" Grid.Row="0" >Hello World</TextBox>
<TextBlock Grid.Row="1">
<TextBlock.Text>
<Binding ElementName="mySourceElement" Path="Text" Mode="TwoWay" Delay="60000" />
</TextBlock.Text>
</TextBlock>
<TextBlock Text="{Binding ElementName=mySourceElement, Mode=TwoWay, Path=Text, Delay=50000}" Grid.Row="2" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
它基本上是基于代码项目(http://www.codeproject.com/Articles/29054/WPF═-Binding-Part - 示例零)的教程的代码,但使用.Net 4.5并添加了延迟.我添加了一个很长的延迟来直观地看到差异,但是我没有注意到没有使用延迟的任何不同.
我想知道我是否误解了该属性 - 其他文本框中的文本是否应该等待"延迟"金额以反映用户在第一个文本框中键入的更改?
是的你误解Delay了一下.此属性以非常混乱的方式命名.事实上,从目标到源,它只能以一种方式工作.意味着当目标中发生每个更改时,更新到源的更改将被延迟.另一种方式不起作用,意味着源中发生的每一次更改都不会延迟反射到目标.
所以在这种情况下它应该是这样的:
<!-- NOTE: we name TextBlock as target but
in fact it's the source of the Binding -->
<TextBox Text="{Binding Text, ElementName=target, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged, Delay=1000}"
></TextBox>
<TextBlock Grid.Row="1" Name="target">
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您的Binding源代码为TextBox,目标为TextBlock.因此,每一次变化TextBox都会立即反映TextBlock出来Delay.