【问题标题】:Why Binding Syntax Differs when we are writing in nested XAML为什么在嵌套 XAML 中编写时绑定语法不同
【发布时间】:2013-03-08 09:36:11
【问题描述】:

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

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

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

但同样可以写成:

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

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

【问题讨论】:

    标签: wpf xaml mvvm binding


    【解决方案1】:

    您显示的两个 sn-ps 代码都将 Binding 类实例化为 MarkupExtension 并允许它为您的 CommandBehaviourCommandParameter 属性提供值。

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

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

    希望这能解释一切。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 2011-03-28
      • 1970-01-01
      • 2012-04-11
      • 2020-03-14
      • 2014-03-12
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      相关资源
      最近更新 更多