我正在尝试使一些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)。 第二个不起作用。 它应该如何正常工作?
答案 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>