2009-03-10 1 views
12

В чем разница между созданием связующего самореферентного имени по имени или самореферентом через RelativeSource?Различия между ElementName = "<Me>" и RelativeSource self?

Например:

<!-- Self referential via name --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, ElementName=This}"/> 

против

<!-- Self referential via RelativeSource --> 
<Window ... 
    x:Name="This" 
    DataContext="{Binding Path=Data, RelativeSource={RelativeSource Self}}"/> 

В моем проекте они, кажется, ведут себя одинаково, но я их помощью непосредственно в окне. Это означает, что я сразу предпочитаю первое, потому что это меньше печатает.

Единственное преимущество RelativeSource в его способности быть самореферентным в (например) широко используемом стиле? Или есть какая-то дополнительная смысловая разница?

ответ

8

Оговорка: Не волшебник WPF

При связывании непосредственно на элемент WPF, как в вашем примере нет никакой разницы. «Это» разрешимо и связывается с тем же элементом, что и «Я».

Мое подозрение - это разница, когда вы привязываетесь через такие конструкции, как стиль. В этом случае то, что вы на самом деле хотите связать, - это элемент, к которому применяется стиль. В этом случае RelativeSource Self предоставит вам тот элемент, где «this» просто даст вам экземпляр Style.

+1

Это было единственное, что я мог придумать или найти. Я столкнулся с множеством других вопросов: WPF, где я пропустил информацию, поэтому я хотел посмотреть, есть ли у кого-нибудь что-то в этом роде. Спасибо, Джаред. :) –

-1

Почему, по вашему мнению, существует разница между ними? Я думаю, что они должны быть одинаковыми, поскольку они являются двумя способами обращения к одному и тому же элементу.

+0

«Я думаю» и «должен» не является ответом. Рассмотрим, как каждый метод разрешает цель и сценарии, которые могут вызывать различия. См. Ответ JaredPar. – Gusdor

2

Если вы склонны реорганизовывать имена ваших элементов управления, то использование саморефессиональной формы может быть более желательным, иначе я бы сказал, что это вызов, который я бы сделал на основе производительности. Постройте небольшой тест и посмотрите, какой тип привязки лучше работает, и выберите его. Если разница в производительности пренебрежимо мала, я бы определенно принял во внимание другие соображения совместимости, такие как общий внешний вид и время ввода. Кроме того, не забывайте, что при использовании собственной ссылочной формы вам не нужно указывать свой элемент, поэтому вам нужно включить это дополнительное требование именования для формы ElementName при сравнении того, как много печатать и переводить контекст между мышью и клавиатурой.

Лично я предпочитаю ссылочные формы привязки, когда это имеет смысл для упрощения рефакторинга, и тот факт, что мне не нужно перемещать свой документ XAML, чтобы добавить имя элемента при настройке привязки.

 Смежные вопросы

  • Нет связанных вопросов^_^