В моем приложении (это связано с очень динамичной навигацией и представлением содержимого) я должен использовать эту конструкцию в 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).
Любые идеи, почему?
Причина, по которой я спрашиваю, это то, что я ненавижу следующие последствия решения:
- В этот момент я теряю безопасность типов.
- Это может быть немного сложно объяснить новым разработчикам или чрезмерно скептическим wisecracks.