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>

どこElementNamePath両方が引用符の中にあります。それは単なる矛盾ですか、それともいくつかの階層が欠落していますか?

4

1 に答える 1

6

表示している 2 つのコード スニペットは、両方ともBindingクラスを としてインスタンス化し、クラスがのプロパティにMarkupExtension値を提供できるようにします。CommandParameterCommandBehaviour

2 番目のバリアント (「ネストされた XAML」と呼ぶもの) は、Bindingクラスをインスタンス化し、プロパティに値を提供する標準的な方法と呼ぶことができます。クラス名は要素名であり、各プロパティは属性であり、XML のすべての規則に従います。 : すべての属性値は引用符で囲む必要があります。

もちろん、この正規の構文は、マークアップ拡張機能を使用して多くのプロパティを設定する必要がある場合、一種の重いものになるため、代替の簡略構文が導入されました:CommandParameterマークアップ拡張機能を使用して名前が付けられたプロパティの値を設定する必要がある場合はBinding、簡単なCommandParameter="{Binding ...}"XML 構文を使用してそれを行うことができます。値の中かっこは非常に重要です。XAML パーサーにその属性値を別の方法で処理するように指示します。新しくインスタンス化された Binding クラスのプロパティ値を設定する必要があります。これを属性値name="value"に記述しているため、通常の XAML 構文は使用できず、引用符はスキップされます。

これですべてが説明されることを願っています。

于 2013-03-08T10:04:39.327 に答える