Обновить свойство зависимости до выхода из программы - PullRequest
1 голос
/ 13 сентября 2010

Я создал свойство зависимости типа Binary в RichTextBox, которое позволяет мне привязываться к FlowDocument, который находится в двоичной форме (byte []) внутри ViewModel. Это хорошо работает, свойство конвертируется в и обратно правильно.

Всякий раз, когда RichTextBox теряет фокус, значение свойства зависимости обновляется новым двоичным представлением FlowDocument.

Моя проблема в том, что если я использовал RichTextBox и закрываю окно, RichTextBox не теряет фокус, и, следовательно, свойство зависимости не обновляется с новым двоичным представлением FlowDocument, и поэтому новые изменения не фиксируются в база данных. В моей ViewModel у меня есть метод CleanUp, который вызывается, когда ViewModel готовится к утилизации, где я могу сохранить обновленный документ.

Как я могу заставить свойство зависимости обновляться, так как RichTextBox не теряет фокус, если пользователь щелкает, чтобы закрыть окно? Я мозговой штурм следующее:

  1. Скажите свойству зависимости обновляться через широковещательную рассылку. Мне не ясно, как зарегистрировать прослушиватель сообщений в свойстве зависимости.
  2. Запросите RichTextBox напрямую, получите документ, преобразуйте его в двоичный объект вручную.
  3. Получите представление для перемещения фокуса на фиктивный элемент управления, чтобы свойство зависимости теперь обновлялось само.

Что вы, ребята, думаете?

Обновление: событие при изменении для свойства зависимости добавляет обработчик события, который ожидает, что RichTextBox потеряет фокус. Именно этот обработчик обновляет зависимость новым значением.

Ответы [ 3 ]

0 голосов
/ 13 сентября 2010

Однажды у меня была похожая проблема, решение, которое я использовал, состояло в том, чтобы переместить фокус на другой элемент управления, и у меня никогда не было проблем с этим.

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

0 голосов
/ 15 сентября 2010

Что мешает вам обработать событие закрытия / закрытия окна и переместить фокус или обновить привязку?

0 голосов
/ 13 сентября 2010

Используйте UpdateSourceTrigger «PropertyChanged»

Что-то вроде:

{Binding Path=MyProperty, 
                    Mode=TwoWay,
                    UpdateSourceTrigger=PropertyChanged}
...