我看到了一个很好的解决方案,以便测试一个组的验证:
在我的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吗?
非常感谢:)
最好的问候:)
答案 0 :(得分:0)
我认为问题在于All
Linq
用法
如果源序列的每个元素都通过,则全部将返回true 指定谓词中的测试,或序列为空; 否则,错误。
如果DependencyObjects
DependencyObject
上没有孩子All
,则会返回true
尝试使用其他Linq方法(例如Any
)检查IsValid
条件
return !Validation.GetHasError(obj) &&
!LogicalTreeHelper.GetChildren(obj)
.OfType<DependencyObject>()
.Any(child => !IsValid(child));