gpt4 book ai didi

wpf - 忽略由于数据绑定(bind)而导致的文本/值更改

转载 作者:行者123 更新时间:2023-12-02 03:34:03 27 4
gpt4 key购买 nike

当数据绑定(bind)发生时,如何忽略对控件的更改?我尝试 Hook 各种事件,例如gotfocus、textchanged和leavefocus,但是如果控件已经获得焦点并且用户“取消”他们的更改,当我重新加载记录并且数据绑定(bind)接管时,textchanged认为用户仍然进行了更改,因为重点是该控制。调用堆栈为空。是否有任何全局数据绑定(bind)事件,例如数据绑定(bind)开始和数据绑定(bind)结束?我看到我在哪里触发了 OnProperyChanged 但在该调用中,数据绑定(bind)不会发生。看起来它正在“排队”并在其他时间点运行。

有一次,我打算在 View 模型中 Hook 属性更改事件,但这意味着我不会检测到也无法直观地显示表单被修改,直到用户离开控件。我知道,我知道,我可以更改所有绑定(bind),以便在每次字符更改时立即发生绑定(bind),但这会扰乱某些验证情况,因为用户尚未完成输入其值。

我真的很喜欢像 TextChangedByUser 这样的事件,无论用户使用按键、剪贴板、鼠标剪贴板还是由用户触发的任何东西,它都会触发。

我只是不知道如何区分用户更改和数据绑定(bind)更改。

最佳答案

I'd really love some kind of event like TextChangedByUser that would fire whether the user used a key, clipboard, mouse clipboard, anything triggered by the user.

I just can't figure out how to distinguish between user changes and databinding changes.

不要使用 Text.TextChanged 事件来检测用户输入,
请改用 Binding.SourceUpdated 事件。

或更一般地说:不要使用视觉元素的 DP 来检测用户更新,而应使用 Binding.SourceUpdated 事件。

这是一个路由事件。在绑定(bind)时,您必须设置 NotifyOnSourceUpdated = true。在 UpdateSourceTrigger 的帮助下,您甚至可以在需要通知时进行微调。

<小时/>你的 xaml 可能是这样的:

<Grid x:Name="LayoutRoot" Binding.SourceUpdated="LayoutRoot_SourceUpdated">
...
<TextBox>
<TextBox.Text>
<Binding NotifyOnSourceUpdated="True" Path="path" UpdateSourceTrigger="PropertyChanged" >
</Binding>
</TextBox.Text>
</Grid>

您的事件可能是这样的:

private void LayoutRoot_SourceUpdated(object sender, DataTransferEventArgs e)
{
// called every time s.th. changed by user
}

(因评论而编辑)
为什么这是检测用户是否以任何方式触发输入的有效方法?
在给定的示例中,TextBox 的 DataContext“path”属性是,而“TextBox.Text”属性是目标
[数据绑定(bind)概述] http://msdn.microsoft.com/en-us/library/ms752347.aspx
当绑定(bind)初始化并且源值写入“TextBox.Text”属性时,TextBox.Text 属性首次更改。因为您不知道绑定(bind)何时发生,所以无法使用 TextBox.Text 属性或其任何事件(例如 TextChanged)来检测用户输入。因此:不要使用 Text.TextChanged 事件来检测用户输入!更一般地说:不要使用视觉元素的 DP 来检测用户更新!!!

如果用户通过任何方式更改可视文本字段的内容,“TextBox.Text”属性就会更改(您的目标)。之后,绑定(bind)会更新UpdateSourceTrigger 定义的时间。此时会触发 SourceUpdated 事件。

我承认不知道从绑定(bind)外部更改绑定(bind)源的效果。但我有一个完整的类似编辑器的桌面应用程序,可以通过这种方式检测用户的更改,并且运行得非常好。

关于wpf - 忽略由于数据绑定(bind)而导致的文本/值更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com