WPF: привязки - объект не обновлен - PullRequest
2 голосов
/ 26 марта 2009

У меня есть объект, который установлен в DataContext в окне. У меня есть текстовые поля в окне, которые связаны со свойствами объекта. Однако перед обновлением свойств объекта возникает задержка.

<TextBox x:Name="txtPropertyOne" Text="{Binding Path=PropertyOne,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"  />

Если я изменю значения в нескольких текстовых полях, то быстро попытаюсь получить доступ к свойствам, с которыми они сопоставляются, иногда возникают изменения, которые не отражаются в свойствах объекта. Я думал, что это то, о чем должен был заботиться PropertyChanged UpdateSourceTrigger.

Ответы [ 3 ]

1 голос
/ 26 марта 2009

Если я изменю значения в несколько текстовые поля затем быстро попытаться получить доступ свойства, на которые они отображаются

Я могу интерпретировать это утверждение двумя способами:

  1. Вы пытаетесь получить доступ к значениям в фоновом потоке. В этом случае вы можете получить доступ к свойствам до того, как поток пользовательского интерфейса сможет выполнить свою задачу.
  2. Вы используете отдельное сообщение в потоке пользовательского интерфейса для проверки значений. Привязки обновляются с приоритетом ниже Send и Normal. Поэтому, если ваше сообщение имеет приоритет Send или Normal, оно будет обработано перед любыми ожидающими обновлениями привязки.

Если это не отвечает на ваш вопрос, уточните, что вы подразумеваете под «быстрой попыткой доступа к свойствам».

0 голосов
/ 26 марта 2009

Основное правило привязки данных WPF простое:

  • Целевое свойство должно быть свойство зависимости, и вы уже правильно, это связано с текстом свойство TextBox.
  • Свойство источника может быть CLR объект (кроме любого производного WPF DependencyObject), но объект должен нанять или реализовать свой собственный INotifyPropertyChanged.

Вы уже реализовали INotifyPropertyChanged на своем объекте?

0 голосов
/ 26 марта 2009

Является ли ваш объект объектом DependencyObject? Является ли свойство, которое вы связываете с DependencyProperty? Если они есть, вам не нужно указывать триггер. Если нет, я бы посоветовал сделать так. Это самый простой способ создать надежно привязываемый объект.

Я думаю, что задержки связаны с использованием вами UpdateSourceTrigger. Я не думаю, что он делает то, что вы думаете, поэтому он не ведет себя так, как вы ожидаете.

Отбросьте UST, и если это не сработает, сделайте рефакторинг вашего связующего объекта DO, а PropertyOne - DP. Поверь мне, как только ты справишься с трудностями изучения DependencyObjects, оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...