Различия между ElementName = "<Me>" и RelativeSource self? - PullRequest
12 голосов
/ 10 марта 2009

В чем различия между привязкой самореференциальной ссылки через имя и самообращением через RelativeSource?

Например:

<!-- 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 его способность ссылаться на себя в (например, широко используемом стиле)? Или есть какая-то дополнительная семантическая разница?

Ответы [ 3 ]

8 голосов
/ 10 марта 2009

Предупреждение: не волшебник WPF

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

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

2 голосов
/ 15 октября 2009

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

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

0 голосов
/ 10 марта 2009

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

...