为什么在使用嵌套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都在引号内。这只是一个不一致,还是我错过了一些层次结构?
发布于 2013-03-08 18:04:39
您展示的两个代码片段都将Binding类实例化为MarkupExtension,并允许它为CommandBehaviour的CommandParameter属性提供值。
第二个变体(称为“嵌套XAML")可以称为实例化Binding类并为属性提供值的规范方法:类名是元素名,每个属性都是一个属性,并且它遵循XML的所有约定:所有属性值都必须用引号括起来。
当然,如果您需要使用标记扩展来设置大量属性,那么这种规范语法就有点繁琐,因此引入了另一种简写语法:如果需要使用标记扩展Binding来设置名为CommandParameter的属性的值,则可以使用简单的CommandParameter="{Binding ...}" XML语法来实现。值中的大括号非常重要,它们告诉XAML解析器以不同的方式处理该属性值。您将需要为新实例化的绑定类设置属性值,并且不能使用name="value"的常用XAML语法,因为这是在一个属性值中编写的,因此将跳过引号。
希望这能解释一切。
https://stackoverflow.com/questions/15290810
复制相似问题