如何控制TextBox文本何时作为绑定源更新目标值?

时间:2018-07-18 14:37:59

标签: c# wpf xaml data-binding lost-focus

尝试简单的事情。我希望将TextBlock的文本更新为TextBox的文本值。但是,我希望它仅在LostFocus上发生。当前,以下代码在用户输入TextBlock时更新TextBox。我们如何实现这一目标?

<StackPanel>
    <TextBox x:Name="txtQty" />
    <TextBlock Text="{Binding ElementName=txtQty, Path=Text}" />
</StackPanel>

我使用UpdateSourceTrigger探索了文本框上的LostFocus属性,但是它无法控制应如何更新源,而这里却需要目标如何更新。

我更喜欢只有XAML的解决方案。

2 个答案:

答案 0 :(得分:2)

XAML是一种标记语言。

直接做到这一点的方法是将TextBoxTextBlock绑定到相同的视图模型源属性。当TextBox失去焦点时,将设置source属性,然后只要视图模型类按预期实现了TextBlock接口,就可以更新INotifyPropertyChanged

您当然还可以为LostKeyboardFocus处理TextBox事件,并在视图的代码背后以编程方式设置Text的{​​{1}}属性。这种方法没有比尝试在完全相同的视图的XAML标记中实现一些逻辑更糟糕的了。仅仅因为您可能可以在纯XAML中执行某些操作,并不意味着您总是应该这样做。诸如C#之类的编程语言通常在实现某些逻辑方面做得更好。

答案 1 :(得分:1)

正如其他人已经说过的,最好的方法是将TextBlockTextBox绑定到相同的viewmodel属性。

如果您只想使用XAML代码进行操作,则可以从另一端尝试将其TextBox绑定到TextBlock。 像这样:

<StackPanel>
    <TextBox  Text="{Binding ElementName=txtQty, Path=Text, UpdateSourceTrigger=LostFocus, Mode=OneWayToSource}" />
    <TextBlock x:Name="txtQty" />
</StackPanel>