2012-12-05 84 views
0

我在遇到自定义的ValidationRule时触发了与Expander.Header绑定关联的问题。实际上,我似乎能够触发这些自定义规则的唯一地方是在DataGrid.RowValidationRules块中...Expander.Header内部的自定义验证规则绑定未触发

扩展器在我的Window XAML文件中被定义为这样;

<Expander Style="{StaticResource ValidatedSecondLevelExpanderStyle}"> 
    <Expander.Header> 
     <Binding Path="Name" Mode="OneWay" ValidatesOnDataErrors="True" NotifyOnValidationError="True"> 
      <Binding.ValidationRules> 
       <ValidationRules:BoundObjectIsValid /> 
      </Binding.ValidationRules> 
     </Binding> 
    </Expander.Header> 
</Expander> 

绑定属性“名称”显示正确,但验证规则“BoundObjectIsValid”未被调用。这是可能的,如果是这样,我错过了什么?

我知道我可以交替实现IDataErrorInfo的绑定的对象,但对象不能理智地验证本身没有由该系统的其他部分提供了一些背景。重构是可能的,但我很想让ValidationRules首先工作!

回答

0

请参阅msdn

绑定引擎在每次将绑定目标属性值的输入值传输到绑定源属性时检查与绑定关联的每个ValidationRule。

因此,在你的情况下,你没有将inpurt值转移到源属性,因为你的Expander.header不是你可以用来输入值的控件。

编辑:但ValidationRule中有一个名为ValidatesOnTargetUpdated的属性。不能由用户改变 - 当设置为true,当目标属性更新

+0

我已经得到了他们的DataGrid显示时验证行有效性规则将被应用。我认为有一种方法可以用任何绑定来实现,因为它是可用的设置...? –

+1

@RJLohan您可以尝试有效性规则的属性“ValidatesOnTargetUpdated”设置为true。我只是发现有这样一个属性。希望这有助于。 – Colin

+0

貌似这个属性有差别,不知道为什么,虽然,因为它不会在其他情况下应用。 –