尝试简单的事情。我希望将TextBlock
的文本更新为TextBox
的文本值。但是,我希望它仅在LostFocus
上发生。当前,以下代码在用户输入TextBlock
时更新TextBox
。我们如何实现这一目标?
<StackPanel>
<TextBox x:Name="txtQty" />
<TextBlock Text="{Binding ElementName=txtQty, Path=Text}" />
</StackPanel>
我使用UpdateSourceTrigger
探索了文本框上的LostFocus
属性,但是它无法控制应如何更新源,而这里却需要目标如何更新。
我更喜欢只有XAML的解决方案。
答案 0 :(得分:2)
XAML是一种标记语言。
直接做到这一点的方法是将TextBox
和TextBlock
绑定到相同的视图模型源属性。当TextBox
失去焦点时,将设置source属性,然后只要视图模型类按预期实现了TextBlock
接口,就可以更新INotifyPropertyChanged
。
您当然还可以为LostKeyboardFocus
处理TextBox
事件,并在视图的代码背后以编程方式设置Text
的{{1}}属性。这种方法没有比尝试在完全相同的视图的XAML标记中实现一些逻辑更糟糕的了。仅仅因为您可能可以在纯XAML中执行某些操作,并不意味着您总是应该这样做。诸如C#之类的编程语言通常在实现某些逻辑方面做得更好。
答案 1 :(得分:1)
正如其他人已经说过的,最好的方法是将TextBlock
和TextBox
绑定到相同的viewmodel属性。
如果您只想使用XAML代码进行操作,则可以从另一端尝试将其TextBox
绑定到TextBlock
。
像这样:
<StackPanel>
<TextBox Text="{Binding ElementName=txtQty, Path=Text, UpdateSourceTrigger=LostFocus, Mode=OneWayToSource}" />
<TextBlock x:Name="txtQty" />
</StackPanel>