当我们在嵌套的XAML中编写时,为什么绑定语法不同

时间:2013-03-08 09:36:12

标签: wpf xaml mvvm binding

为什么在我们使用嵌套XAML编写时,绑定语法不同。例如:

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

在上面的示例中,CommandParameter ElementNamePath没有任何引号。

但同样可以写成:

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

其中ElementNamePath都在引号内。这只是一种不一致还是我错过了某种等级?

1 个答案:

答案 0 :(得分:5)

您要显示的两段代码片段将Binding类实例化为MarkupExtension,并允许它为{{1}的CommandParameter属性提供值}}

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

如果您需要使用标记扩展来设置大量属性,那么这种规范语法当然有点沉重,因此引入了另一种简短的语法:如果您需要设置名为{{1的属性的值使用标记扩展Binding,您可以使用简单的CommandParameter XML语法来实现。值中的花括号非常重要,它们告诉XAML解析器以不同方式处理该属性值。您需要为新实例化的Binding类设置属性值,并且您不能使用Binding的常用XAML语法,因为您正在内部编写 >属性值,因此会跳过引号。

希望这能解释一切。