我有listview的单元格模板定义如下:
<DataTemplate x:Key="editableIPAddressColTemplate">
<Grid x:Name="dtTemplateGrid">
<TextBlock Width="100" FontSize="11" Text="{Binding ElementName=txt, Path=Text, Mode=TwoWay}"
ToolTip="{Binding ElementName=txt, Path=ToolTip, Mode=OneWay}"
Style="{StaticResource GridBlockStyle}">
</TextBlock>
<TextBox x:Name="txt" FontSize="11" Width="100" Style="{StaticResource GridEditStyle}"
Validation.Error="TextBox_Error" LostFocus="txt_LostFocus" >
<Binding Path="IPAddress" Mode="TwoWay" ValidatesOnDataErrors="True"
ValidatesOnExceptions="True" NotifyOnValidationError="True">
<Binding.ValidationRules>
<local:IPAddressValidationRule>
<local:IPAddressValidationRule.Params>
<local:ValidationParameters BoundListView="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}"/>
</local:IPAddressValidationRule.Params>
</local:IPAddressValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox>
</Grid>
</DataTemplate>
IPAddressValidationRule派生自ValidationRule,并且具有名为Params的属性,其类型为ValidationParameters。 ValidationParameters类派生自依赖项对象,并且具有一个名为BoundListView的属性,该属性的类型为ListView。
当我看到调试器时,在IPValidationRule类中,BoundListView属性始终为null。我究竟做错了什么?
如果有人能帮助我弄清楚这一点,我将不胜感激。
提前多多感谢。
答案 0 :(得分:2)
你在树中有一个中断,验证规则只是作为绑定的属性浮动,你不能在这样一个断开连接的地方使用ElementName
或RelativeSource
。检查输出窗口,你应该能够看到一些关于此的绑定错误。
您可以尝试命名ListView
并使用x:Reference
设置Binding.Source
(x:Reference
不喜欢周期性依赖关系,因此您需要注意这一点)