XAML 2009 - x: Ссылка - есть ли недостатки в использовании этого?

У меня всего несколько месяцев опыта работы с XAML, и мне часто бывает трудно определить, как связывать или ссылаться на элементы, определенные в разных местах моего XAML. Недавно я столкнулся с X:Reference, который, как я понимаю, является новым для XAML 2009 и.NET 4.

Например, предположим, что я пытаюсь привязать свойство IsChecked элемента с именем DisplayIndicator, который определен в другом месте моего XAML. X: Ссылка позволяет мне сделать это следующим образом:

{Binding Source={x:Reference DisplayIndicator}, Path=IsChecked}

Это кажется простым способом (и предпочтительным способом?) Ссылаться почти на любой элемент, объявленный в моем XAML. Я ошибаюсь по этому поводу? Есть ли недостаток в использовании этого?

Спасибо большое.

2 ответа

Решение

От x:Reference документация:

В WPF и XAML 2006 ссылки на элементы рассматриваются с помощью функции уровня структуры привязки ElementName. Для большинства приложений и сценариев WPF все еще следует использовать привязку ElementName. Исключения из этого общего руководства могут включать случаи, когда существуют контекст данных или другие соображения, связанные с областью применения, которые делают нецелесообразным привязку данных, и когда компиляция разметки не участвует.

Я также только использую x:Reference если ElementName это не вариант. Единственное, что здесь не упомянуто, это то, что x:Reference довольно требователен к циклическим зависимостям, что не относится к ElementName; так что это будет недостатком.

К сожалению, вы не можете использовать функции XAML 2009 с XAML, который используется для определения визуальных элементов в приложении WPF. См. http://msdn.microsoft.com/en-us/library/ee792007.aspx:

В WPF вы можете использовать функции XAML 2009, но только для XAML, который не скомпилирован с разметкой WPF. Скомпилированный с разметкой XAML и форма XAML BAML в настоящее время не поддерживают ключевые слова и функции языка XAML 2009.

Но что касается x:Reference есть легкая альтернатива:

{Binding ElementName=DisplayIndicator, Path=IsChecked}
Другие вопросы по тегам