2

为什么在嵌套 XAML 中编写时绑定语法会有所不同。例如 :

 <extensibility:CommandBehavior 
       Command="{Binding SelectionChanged}"  
       CommandParameter="{Binding ElementName=modeItemsListBox,Path=SelectedItems}" >

在上面的例子中,我有 CommandParameterElementName没有Path任何引号。

但同样可以写成:

<extensibility:CommandBehavior
      Command="{Binding SelectionChanged}">
      <extensibility:CommandBehavior.CommandParameter>
            <Binding ElementName="modeItemsListBox"="SelectedItems" />
      </extensibility:CommandBehavior.CommandParameter>
</extensibility:CommandBehavior>

WhereElementNamePath都在引号内。这只是不一致还是我缺少一些层次结构?

4

1 回答 1

6

您显示的两个代码片段都将Binding类实例化为 aMarkupExtension并允许它为CommandParameter您的CommandBehaviour.

第二种变体(你称之为“嵌套 XAML”的那个)可以称为实例化Binding类并为属性提供值的规范方式:类名是元素名,每个属性都是一个属性,它遵循 XML 的所有约定:必须引用所有属性值。

当然,如果您需要使用标记扩展设置大量属性,则这种规范语法有点繁重,因此引入了另一种简写语法:如果您需要设置CommandParameter使用标记扩展命名的属性的值Binding,您可以使用简单的CommandParameter="{Binding ...}"XML 语法来做到这一点。值中的花括号非常重要,它们告诉 XAML 解析器以不同的方式处理该属性值。您需要为新实例化的 Binding 类设置属性值,并且不能使用通常的 XAML 语法,name="value"因为您将其写入属性值,因此会跳过引号。

希望这能解释一切。

于 2013-03-08T10:04:39.327 回答