WPF TextBox UpdateSourceTrigger = LostFocus不断更新数据

时间:2016-07-29 08:21:49

标签: c# .net wpf vb.net data-binding

我正在通过WPF的教程系列。目前我正处于这一步http://www.wpf-tutorial.com/data-binding/responding-to-changes/

我遇到的问题是我希望Textbox只在我离开TextBox时更新值。但即使更好地进入 TextBox,当我更改窗口大小时,值也会更新。那不是我的期望。我的错误在哪里?

这里是自己测试代码的简短版本:

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <Grid>
        <WrapPanel Orientation="Horizontal" 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>
    </Grid>
</Window>

2 个答案:

答案 0 :(得分:3)

  

但是,即使我在TextBox内部,我也会更新值   改变窗口大小。

您自己说过,在更改窗口大小时,值会更新。这是因为文本框中的焦点丢失了。如果您希望焦点丢失,则可以通过编程方式将焦点设置到文本框中。

第二个文本框<TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50"/>也有UpdateSourceTrigger=PropertyChanged。我希望不是你要解释的情况,因为只要在文本框中输入新字符,UpdateSourceTrigger=PropertyChanged就会更新来源。

答案 1 :(得分:1)

UpdateSourceTrigger从TextBox到绑定控件&amp;属性。所以,我想第一个TextBox只在焦点丢失时才更新Window的属性Width。第二个TextBox在每次更改值时更新窗口的属性高度。调整窗口大小时,两个TextBox都会更新,因为源是Window。 UpdateSourceTrigger属性的工作原理是将TextBox作为源。