wpf拖放设置器在源代码中调用

wpf拖放设置器在源代码中调用,wpf,binding,drag-and-drop,Wpf,Binding,Drag And Drop,我有一个这样的文本框: <TextBox x:Name="txtCondition" Text="{Binding Path=Name ,Mode=TwoWay}"/> 当我选择此文本框中的文本并将其拖动到某个位置时,会自动调用此文本框中绑定属性的setter,但我不明白为什么: 在这种情况下,wpf不调用setter属性,是否可以以某种方式将其关闭 提前感谢您的帮助 问候,, 佐利 编辑: 我们必须在这里进行一些黑客攻击: 我们在viewModel中创建一个bool变量。在pre

我有一个这样的文本框:

<TextBox x:Name="txtCondition" Text="{Binding Path=Name ,Mode=TwoWay}"/>
当我选择此文本框中的文本并将其拖动到某个位置时,会自动调用此文本框中绑定属性的setter,但我不明白为什么:

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

提前感谢您的帮助

问候,, 佐利

编辑:

我们必须在这里进行一些黑客攻击:

我们在viewModel中创建一个bool变量。在previewDrop事件中将bool变量设置为true,并在调用setter时检查此bool变量值。如果为true,则在setter中不执行任何操作,并将bool变量设置为false

另一种方式是,您可以检查stacktrace以找出调用此setter的位置:


但我很好奇,为什么当我们从源文件中删除一个项目时,wpf会调用绑定属性的setter,所以如果有人知道这个原因,请通知我们:。

文本框的默认绑定行为是在焦点丢失时更新,所以当您拖动时会触发。您可以将绑定的属性更改为Explicit以避免自动更新,但当然,您需要在某个时候手动触发更新。

它也不能用于Explicit:。当我释放带有拖动文本的鼠标按钮时,setter将调用。无论如何,在拖放之后,焦点已经在上一个文本框中的拖动文本上。谢谢,我正在等待它:我想这与拖放功能的封装实现有关。我现在想不出一个干净简单的方法来避免这种情况。您可能会尝试禁用非繁琐的默认拖放,并在不强制bindig更新的情况下手动实现它。坏消息:。我希望还有别的办法。