【问题标题】:wpf drag and drop setter invoke in sourcewpf拖放设置器在源代码中调用
【发布时间】:2011-04-14 01:53:13
【问题描述】:

我有一个这样的文本框:

<TextBox x:Name="txtCondition" Text="{Binding Path=Name ,Mode=TwoWay}"/>

当我选择此文本框中的文本并将其拖动到某处时,会自动调用此文本框中绑定属性的设置器,但我不明白为什么:( .

是否有可能以某种方式将其关闭,在这种情况下 wpf 不会调用 setter 属性?

提前感谢您的帮助!

问候, 佐利

编辑:

我们必须在这里做一些 hack :)。

我们在 viewModel 中创建一个 bool 变量。在 previewDrop 事件中将 bool 变量设置为 true,并在调用 setter 时检查此 bool 变量值。如果为 true,则在 setter 中什么都不做,并将 bool 变量设置为 false。

另外,您可以检查堆栈跟踪以找出调用此设置器的位置:)

但是我很好奇为什么 wpf 在我们从中删除项目时调用源中绑定属性的设置器,所以如果有人知道这个原因,请告诉我们:)。

【问题讨论】:

    标签: wpf binding drag-and-drop


    【解决方案1】:

    TextBoxes 的默认绑定行为是在失去焦点时更新,所以当你拖开时会触发它。您可以将绑定的UpdateSourceTrigger 更改为Explicit 以避免自动更新,但当然您需要在某些时候手动触发更新。

    【讨论】:

    • 它也不适用于显式:(。当我释放带有拖动文本的鼠标按钮时,setter 调用。
    • 反正放下后,焦点已经在前一个文本框中拖拽的文本上。
    • 谢谢,我在等它:)
    • 我猜这与拖放功能的封装实现有关。我现在想不出一种干净简单的方法来避免这种情况。您可以尝试禁用默认拖放(这不是琐碎的)并手动实现它而不强制绑定更新。
    • 坏消息 :( 。我希望有其他方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多