これは、データ バインディング自体の機能ではありません。同じことが、どのマークアップ拡張機能にも当てはまります。たとえば、次の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 が構文を制御しています。マークアップ拡張機能の 1 つの目標は、冗長性を減らすことです。Microsoft は引用符をオプションにすることができたので、そうしました。(実際、引用符を必須にするのは面倒です。なぜなら、エスケープの問題に陥る傾向があるためです。マークアップ拡張機能が属性の値である場合、それは既に引用符で囲まれているため、ネストされた引用符を必須にするのは面倒です。)
ちなみに、3 番目の構文があります。
<myObject.myProperty>
<Binding>
<Binding.Path>myData</Binding.Path>
</Binding>
<myObject.myProperty/>
ABinding
は、XAML の他のオブジェクトと同様に単なるオブジェクトであるため、属性またはプロパティ要素を使用してそのプロパティを設定できます。プロパティ要素として設定Path
することで、その値をそのプロパティ要素のコンテンツとして提供できます。XML 構文規則では、要素の内容を引用符で囲む必要がないため、ここでも引用符を省略しています。
したがって、すべては、データに引用符が必要な場所に関する XML のルールに帰着します。XAML とはあまり関係がなく、データ バインディングに固有のものでもありません。