速记和纵向WPF绑定等价

时间:2016-04-22 06:02:55

标签: wpf xaml

我正在尝试使一些XAML片段更具可读性(不是生产代码,只是为了让我更好地理解XAML内部工作)。 原始代码是

   <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}">

我已将其更改为

<CheckBox>
   <CheckBox.IsChecked>
      <Binding Path="IsSelected" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
         <Binding.Source>
             <RelativeSource Mode="FindAncestor" AncestorType="{x:Type DataGridRow}"/>
         </Binding.Source>
      </Binding>
   </CheckBox.IsChecked>
</CheckBox>

第一个表单正常工作(它正确地将CheckBox的IsChecked属性绑定到容器的IsSelected属性(DataGridRow)。 第二个不起作用。 它应该如何正常工作?

1 个答案:

答案 0 :(得分:2)

这是因为您在第二种情况下设置了<Binding.Source>而不是<Binding.RelativeSource>。如果您设置<Binding.RelativeSource>,它也会有效。

<CheckBox>
   <CheckBox.IsChecked>
      <Binding Path="IsSelected" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay">
         <Binding.RelativeSource>
             <RelativeSource Mode="FindAncestor" AncestorType="{x:Type DataGridRow}"/>
         </Binding.RelativeSource>
      </Binding>
   </CheckBox.IsChecked>
</CheckBox>