为了测试控制组的验证,我看到了一个很好的解决方案:
在我的 Window.xaml.cs 中:
private bool IsValid(DependencyObject obj)
{
// The dependency object is valid if it has no errors,
//and all of its children (that are dependency objects) are error-free.
return !Validation.GetHasError(obj) &&
LogicalTreeHelper.GetChildren(obj)
.OfType<DependencyObject>()
.All(child => IsValid(child));
}
我的问题是,就我而言,即使我有错误,isValid 总是返回 true。我认为是因为 xaml 错误但是......在哪里?
这是我的 Windows.XAML :
<Window.Resources>
<CommandBinding x:Key="binding" Command="Save" Executed="Save_Executed" CanExecute="Save_CanExecute" />
</Window.Resources>
<TextBox Name="TextBox_TypeEvenement" Grid.Column="1" VerticalAlignment="Center" Height="20">
<TextBox.Text>
<Binding Path="strEvtType">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Button Template="{StaticResource BoutonRessourcesTpl}" Command="Save">
<Button.CommandBindings>
<StaticResource ResourceKey="binding"></StaticResource>
</Button.CommandBindings>
<Image Source= "Toolbar_Valider.png" Height="16"/>
</Button>
这是我的 Class.cs c# :
private string m_strEvtType;
public string strEvtType
{
get { return m_strEvtType; }
set {
m_strEvtType = value;
if (m_objEvtCode.ReadEvtTypebyType(m_strEvtType) != 0)
{
throw new ApplicationException(m_strEvtType.Trim() + " est innexistant !");
}
FirePropertyChangedEvent("strEvtType");
FirePropertyChangedEvent("m_objEvtCode.strDes");
}
}
你知道为什么 isValid 总是返回 true 吗?
非常感谢 :)
此致 :)