为什么在我们使用嵌套XAML编写时,绑定语法不同。例如:
<extensibility:CommandBehavior
Command="{Binding SelectionChanged}"
CommandParameter="{Binding ElementName=modeItemsListBox,Path=SelectedItems}" >
在上面的示例中,CommandParameter
ElementName
和Path
没有任何引号。
但同样可以写成:
<extensibility:CommandBehavior
Command="{Binding SelectionChanged}">
<extensibility:CommandBehavior.CommandParameter>
<Binding ElementName="modeItemsListBox"="SelectedItems" />
</extensibility:CommandBehavior.CommandParameter>
</extensibility:CommandBehavior>
其中ElementName
和Path
都在引号内。这只是一种不一致还是我错过了某种等级?
答案 0 :(得分:5)
您要显示的两段代码片段将Binding
类实例化为MarkupExtension
,并允许它为{{1}的CommandParameter
属性提供值}}
第二个变体(你调用的那个&#34;嵌套的XAML&#34;)可以被称为实例化CommandBehaviour
类并提供属性值的规范方式:类名是元素名,每个属性都是一个属性,它遵循XML的所有约定:必须引用所有属性值。
如果您需要使用标记扩展来设置大量属性,那么这种规范语法当然有点沉重,因此引入了另一种简短的语法:如果您需要设置名为{{1的属性的值使用标记扩展Binding
,您可以使用简单的CommandParameter
XML语法来实现。值中的花括号非常重要,它们告诉XAML解析器以不同方式处理该属性值。您需要为新实例化的Binding类设置属性值,并且您不能使用Binding
的常用XAML语法,因为您正在内部编写 >属性值,因此会跳过引号。
希望这能解释一切。