#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. Плохие новости: ( . Я надеюсь, что есть другой способ.