2013-03-08 68 views
2

当我们在嵌套XAML中编写时为什么绑定语法差异。例如:为什么在编写嵌套XAML时绑定语法差异

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

在上面的例子中我有CommandParameterElementNamePath没有任何引号。

但是,同样可以写成:

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

ElementNamePath都是引号内。这只是一个不一致或我缺少一些层次?

回答

5

您所展示的两段代码将Binding类实例化为MarkupExtension,并允许它为您的CommandBehaviourCommandParameter属性提供值。

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

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

希望这可以解释一切。