В моем приложении (это связано с очень динамичной навигацией и представлением контента) я должен использовать эту конструкцию в XAML:
<ContentControl Content={Binding ContentElement} />
Пока все хорошо.Это здорово, абсолютно здорово.Я могу разместить произвольные вещи повсюду.
Но, кажется, странно, ну, давайте назовем это «явлением» в WPF (я верю, что это в BindingMarkupExtension, но пока не уверен):
Когда мое свойство ContentElement выглядит следующим образом:
public FrameworkElement ContentElement
{
get
{
return this.m_ContentElement;
}
}
, тогда метод получения вызывается TWICE (!!!) для каждой операции привязки данных (это включает в себя, когда пользователь меняет язык на лету илиперезагружает управление хостингом).
Однако (и это то, что ДЕЙСТВИТЕЛЬНО смущает меня):
Когда я изменяю свое свойство ContentElement на:
public object ContentElement
{
get
{
return this.m_ContentElement;
}
}
затемПолучатель вызывается один раз.Серьезно, я не вру здесь.Это абсолютно воспроизводимо в самых простых приложениях, вы можете попробовать, например, вернуть новый «TextBlock» (это то, что я обычно делаю, чтобы проверить или узнать о более продвинутых концепциях WPF).
Есть идеи почему?
Причина, по которой я спрашиваю, состоит в том, что я ненавижу следующие последствия решения:
- В этот момент я теряю безопасность типов
- Это может быть довольно сложно объяснитьновым разработчикам или чересчур скептически настроенным умам