Моя проблема заключается в следующем:
Я определил 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)?
Помощь оценена!