2013-03-08 64 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語法,因爲您在內寫入此屬性值,因此會跳過引號。

希望這可以解釋一切。