Двусторонняя привязка между свойством Resource и свойством объекта времени выполнения - PullRequest
0 голосов
/ 07 октября 2010

Моя проблема заключается в следующем:

Я определил TextBox как дочерний элемент панели инструментов в ResourceDictionary (x: Key MyToolbar). Когда мое приложение загружается, оно правильно размещает панель инструментов внутри фрейма окна вместе со своим TextBox. Все идет нормально.

Конечно, я бы хотел, чтобы тот самый TextBox имел двухстороннюю привязку данных к свойствам некоторых объектов, которые НЕ определены ни в одном ResourceDictionary.

Точнее, когда все текстовое поле установлено в правильной рамке окна, а затем, после команды «Открыть», загружается определенный файл, Deserializer создает объект DesignerCanvas, используя значения из этого файла, в моем случае это является строковым «Token» свойством CLR класса, который реализует INotifyPropertyChanged.

Вот некоторые упрощенные фрагменты кода. Я оставлю много пробелов для ясности:

Класс DesignerCanvas: INotifyPropertyChanged

{

  Private string m_token;

  Public string Token

  {

     Get{….

     Set{ if (value…)

     OnPropertyChanged(“Token”);

  }

  //notice there is no Constructor other than the default one

}

А на стороне XAML у меня есть что-то вроде этого:

<ToolBar x:Key=”MyToolbar…..

    <TextBox …

Теперь мои две цели: чтобы «статический» ресурс TextBox на моей панели инструментов взял значения свойства «Token» DesignerCanvas, как только свойство будет изменено (т.е. получит значение впервые, в основном ), а также, и что более важно, я хочу сделать так, чтобы DesignerCanvas считывал значения, которые я мог бы ввести вручную в TextBox, и заполнял его свойство Token тем текстом пользовательского ввода (я думаю, что я выберу TextBox «Событие LostFocus как триггер для передачи / привязки строкового значения к свойству« Token »в DesignerCanvas.

В любом случае, я не уверен, как настроить идеальную двустороннюю (или двустороннюю) привязку данных между свойством TextBox 'Text и свойством Token DesignerCanvas, так как у нас есть один статический ресурс (I' я не уверен, является ли слово static правильным словом, и другой динамический объект времени выполнения (опять же, не уверен, что слова времени выполнения или динамические - это слова).

Как мне этого добиться? Обязательно ли регистрировать «токен» - DependencyProperty в DesignerCanvas? Нужно ли мне где-нибудь определять XAML для DesignerCanvas (например, в моем Window1.xaml или фиктивном ресурсе s: DesignerCanvas вместе с TextBox)?

Помощь оценена!

1 Ответ

0 голосов
/ 08 октября 2010

Вы пробовали связывать данные с вашим текстовым полем ...

<TextBox Text="{Binding Path=Token, Mode=TwoWay}" />

... затем, когда ваше приложение загружает и помещает панель инструментов в рамку окна, убедитесь, что оно также устанавливает свойство DataContext панели инструментов в экземпляр вашего класса DesignerCanvas?

...