вызов установщика перетаскивания wpf в исходном коде

#wpf #binding #drag-and-drop

#wpf #привязка #перетаскивание

Вопрос:

У меня есть текстовое поле, подобное этому:

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

Когда я выделяю текст в этом текстовом поле и перетаскиваю его куда-либо, автоматически вызывается установщик свойства binded в этом текстовом поле, но я не понимаю почему 🙁 .

Возможно ли как-то отключить это, чтобы wpf не вызывал свойство setter в этом случае?

Заранее спасибо за вашу помощь!

С уважением, Zoli

Редактировать:

Здесь нам нужно немного взломать 🙂 .

Мы создаем переменную bool в ViewModel. Установите для переменной bool значение true в событии previewDrop, и при вызове установщика проверьте значение этой переменной bool. Если это true, ничего не делайте в установщике и установите переменной bool значение false .

Другим способом вы можете проверить трассировку стека, чтобы узнать, где вызывается этот установщик 🙂

Но мне очень любопытно, почему wpf вызывает установщик свойства binded в исходном коде, когда мы удаляем из него элемент, поэтому, если кто-то знает эту причину, пожалуйста, сообщите нам 🙂 .

Ответ №1:

Поведение привязки текстовых полей по умолчанию заключается в обновлении при потере фокуса, поэтому при перетаскивании это срабатывает. Вы могли бы изменить UpdateSourceTrigger привязку на Explicit , чтобы избежать автоматического обновления, но тогда, конечно, вам нужно будет запустить обновление вручную в какой-то момент.

Комментарии:

1. Это также не будет работать с explicit 🙁 . Установщик вызывается, когда я отпускаю кнопку мыши с перетаскиваемым текстом.

2. В любом случае после удаления фокус уже на перетаскиваемом тексте в предыдущем текстовом поле.

3. Спасибо, я жду этого 🙂

4. Я предполагаю, что это связано с инкапсулированной реализацией функциональности перетаскивания. Я не могу придумать чистый и простой способ избежать этого прямо сейчас. Возможно, вы могли бы попытаться отключить перетаскивание по умолчанию (которое не является trival) и реализовать его вручную, не принудительно обновляя привязку.

5. Плохие новости: ( . Я надеюсь, что есть другой способ.