2013-04-01 2 views
1

Может кто-нибудь объяснить, почему при настройке привязки, иногда вы делаете это с кавычками связывания пути -Простой WPF Databinding синтаксис «Путь» собственности

<myObject.myProperty> 
    <Binding Path="myData" /> 
<myObject.myProperty/> 

, а иногда и без -

<myObject myProperty="{Binding Path=myData}" /> 

?

Microsoft (http://msdn.microsoft.com/en-us/library/ms752059.aspx#xaml_syntax_in_brief) состояние -

"An attribute syntax names the property that is 
being set in attribute syntax, followed by the 
assignment operator (=). The value of an attribute 
is always specified as a string that is contained 
within quotation marks." 

Но здесь мы всегда указать атрибут Path в Binding элемента без кавычек. Разве я не понимаю что-то о синтаксисе {}?

ответ

2

Это не функция привязки данных per se. То же самое относится к любому расширению разметки. Например, котировки/без кавычек не вариациям вы охарактеризовали также можно найти с расширением в StaticResource разметки, как показано в примере:

<StackPanel> 
    <StackPanel.Resources> 
     <SolidColorBrush x:Key="b" Color="Red" /> 
    </StackPanel.Resources> 

    <TextBlock 
     Foreground="{StaticResource b}" 
     Text="Foo"/> 
    <TextBlock 
     Text="Foo"> 
     <TextBlock.Foreground> 
      <StaticResource ResourceKey="b" /> 
     </TextBlock.Foreground> 
    </TextBlock> 
</StackPanel> 

Она сводится к следующему: если вы используете элемент XML для создания экземпляра разметки (например, Binding или StaticResource), и если вы установите свойства как атрибуты, для синтаксических правил XML потребуются кавычки. Это вне контроля XAML. Синтаксис XML требует кавычек вокруг всех значений атрибутов.

Но если вы используете расширение синтаксиса разметки (т. Е. {...}), кавычки являются необязательными для свойств, которые вы устанавливаете внутри этих фигурных скобок. Это связано с тем, что синтаксис расширения разметки не является особенностью XML. Это особенность XAML, и поэтому Microsoft контролирует синтаксис. Одна из целей расширений разметки заключается в уменьшении многословности, и, поскольку Microsoft могла делать необязательные кавычки, они сделали это. (Фактически, требование котировок было бы грязным, потому что тогда вы, как правило, сталкиваетесь с проблемами, возникающими при выделении разметки, - когда расширение разметки является значением атрибута, оно уже заключено в кавычки, поэтому требование вложенных котировок может стать беспорядочным.)

Там в третий синтаксис, кстати:

<myObject.myProperty> 
    <Binding> 
     <Binding.Path>myData</Binding.Path> 
    </Binding> 
<myObject.myProperty/> 

Binding это просто объект, как и все остальное в XAML, так что вы можете установить его свойства, используя либо атрибуты или элементы собственности. Установив Path как элемент свойства, я получаю его значение как содержимое этого элемента свойства. Синтаксические правила XML не требуют кавычек вокруг содержимого элемента, поэтому я снова опускаю кавычки.

Итак, все это действительно сводится к правилам XML, где данные нуждаются в котировках. Он не имеет большого отношения к XAML и совсем не привязан к привязке данных.

+0

Краткий ответ и очень понятный. Большое спасибо! – user1886323

+0

Спасибо, рад, что вам понравилось. Любой шанс вы могли бы отметить это как ответ? –

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