Что из следующих привязок TextBlocks "Bindings" стоит больше:
<Window
x:Name="Me"
x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
Title="MainWindow">
<StackPanel>
<TextBlock Text="{Binding Title, ElementName=Me}"/>
<TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType={x:Type src:MainWindow}}}"/>
</StackPanel>
</Window>
Я уверен, что мой вопрос может измениться, если TextBlocks находятся на высоком уровне гнездования, имеющем много братьев и сестер и предков.
Вопросы
(основанный только на личных мыслях, я могу ошибаться в каждом конкретном!):
-
ElementName
:- Можете найти и сравнить текущий элемент для большего контроля над всеми его дочерьми, братьями и сестрами, дядями и отличными дядями, включая предков (возможно, есть HashTable всех зарегистрированных имен?)
- Получение свойства
Name
элемента управления должно стоить меньше производительности, чем вызовGetType
. - Сравнение строки дешевле, чем сравнение типов, особенно когда вы знаете, что большинство элементов управления даже не имеют своих
Name
.
-
FindAncestor
- Будет только итерация через предков, а не дядей сиблинглов, кузенов и т.д.
- Скорее всего используется
GetType
для определения типа предка; GetType стоит больше производительности, чем простой getterName
(может быть, DP разные?)