Sim*_*ons 2 wpf xaml binding mvvm
当我们在嵌套的XAML中编写时,为什么绑定语法不同.例如 :
<extensibility:CommandBehavior
Command="{Binding SelectionChanged}"
CommandParameter="{Binding ElementName=modeItemsListBox,Path=SelectedItems}" >
Run Code Online (Sandbox Code Playgroud)
在上面的例子中我有 CommandParameter 有ElementName和Path没有任何报价.
但同样可以写成:
<extensibility:CommandBehavior
Command="{Binding SelectionChanged}">
<extensibility:CommandBehavior.CommandParameter>
<Binding ElementName="modeItemsListBox"="SelectedItems" />
</extensibility:CommandBehavior.CommandParameter>
</extensibility:CommandBehavior>
Run Code Online (Sandbox Code Playgroud)
哪里ElementName和哪Path两个都在引号内.这只是一个不一致或我错过了一些层次结构?
您显示的两个代码段都将Binding类实例化为a MarkupExtension并允许它为CommandParameter您的属性提供值CommandBehaviour.
第二个变体(你称之为"嵌套的XAML")可以被称为实例化Binding类和提供属性值的规范方法:类名是元素名,每个属性都是一个属性,它遵循XML的所有约定:必须引用所有属性值.
当然,如果需要使用标记扩展来设置许多属性,这种规范语法有点沉重,因此引入了另一种简短的语法:如果需要设置CommandParameter使用标记扩展名命名的属性的值Binding,可以使用简单的CommandParameter="{Binding ...}"XML语法来做到这一点.值中的花括号非常重要,它们告诉XAML解析器以不同方式处理该属性值.你需要为新实例绑定类设置属性值,而不能使用通常的XAML语法,name="value"因为你写这里面的属性值,所以报价被跳过.
希望这能解释一切.
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |