Silverlight XAML属性定义顺序很重要

Dav*_*veB 15 silverlight-3.0

我正在使用ComboBox控件,无法从我的viewmodel上的属性中设置SelectedItem.这是控件定义:

<ComboBox x:Name="jobEmployee" Grid.Column="1" Grid.Row="2" 
    Margin="4" HorizontalAlignment="Left" Width="150"
    SelectedItem="{Binding Path=EditingJob.Employee, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}"
    ItemsSource="{Binding Path=Employees, Mode=OneWay}"
    DisplayMemberPath="FullName"/>
Run Code Online (Sandbox Code Playgroud)

我有另一个Combobox控件,工作得很好.设置SelectedItem的设备与不设置SelectedItem的设备之间的差异是属性定义的顺序.这是工作控件定义:

<ComboBox x:Name="jobEmployee" Grid.Column="1" Grid.Row="2" 
    Margin="4" HorizontalAlignment="Left" Width="150"
    ItemsSource="{Binding Path=Employees, Mode=OneWay}"
    SelectedItem="{Binding Path=EditingJob.Employee, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}"
    DisplayMemberPath="FullName"/>
Run Code Online (Sandbox Code Playgroud)

2之间的区别在于ItemsSource是在工作的SelectedItem之前定义的,这使我相信至少在这种情况下,属性定义顺序很重要.我错过了什么或让别人发现这是真的吗?有没有记录在任何地方?

Ant*_*nes 16

是的命令可以重要.考虑到XAML读取涉及对象的创建以及对这些对象的属性的值的赋值.它不可能同时分配属性值,显然将分配一个属性,然后分配另一个属性,然后分配另一个属性,直到分配所有属性.

由于在某些对象中分配属性会导致副作用,而其他代码运行时,分配这些属性的顺序会影响结果.这当然是件坏事.


Rob*_*ney 5

在任何设置属性的顺序很重要的情况下,您应该使用元素语法而不是属性语法来表示XAML中的这些属性:

<ComboBox x:Name="jobEmployee" Grid.Column="1" Grid.Row="2" 
   Margin="4" HorizontalAlignment="Left" Width="150" DisplayMemberPath="FullName">
   <ComboBox.ItemsSource>
      <Binding Path="Employees" Mode="OneWay"/>
   <ComboBox.ItemsSource>
   <ComboBox.SelectedItem>
      <Binding Path="EditingJob.Employee" Mode="TwoWay" 
         ValidatesOnExceptions="true" NotifyOnValidationError="true"/>
   </ComboBox.SelectedItem>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

根据XML建议,元素上的属性排序并不重要.XML工具不需要保留它们出现的顺序.例如,如果你ComboBox使用XSLT转换处理这个元素(在某些情况下不是一个疯狂的想法),转换可能会改变属性的顺序,即使它正在做<xsl:copy-of>.XSLT处理器可能不会这样做,但不要求不这样做.

随机化XAML中每个元素的属性顺序会对应用程序的行为产生什么影响?这个问题的答案应该是"没有".

这是XAML的一个方面,让我非常紧张.