我使用MVVM和我的對象實現IDataErrorInfo。當設置屬性時,我運行自定義驗證方法,如果驗證通過,則返回String.empty,它將Validation.HasError設置爲false。如果驗證失敗,則將Validation.HasError設置爲true。我有用於「所需的控制」(將執行驗證控件),並設置是控制的工具提示任何錯誤是這樣的風格:Validation.HasError不會再次觸發,如果新錯誤進入而已經爲真
<Style x:Key="RequiredControl" TargetType="{x:Type Control}" >
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding (Validation.Errors), Converter={StaticResource ErrorConverter}, RelativeSource={x:Static RelativeSource.Self}}"/>
</Trigger>
</Style.Triggers>
</Style>
而且ErrorConverter:
public class ZynErrorContentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var errors = value as ReadOnlyObservableCollection<ValidationError>;
if (errors == null) return "";
return errors.Count > 0 ? errors[0].ErrorContent : "";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
問題是這樣的:用戶輸入一些無效的...並將Validation.HasError設置爲true。工具提示會按照預期進行更新。如果用戶嘗試更正錯誤,但輸入的值會導致不同類型的失效,則工具提示應顯示新的錯誤字符串,但這種情況不會發生。該錯誤顯示爲與第一個錯誤相同的錯誤。我知道爲什麼會發生這種情況(我認爲)...因爲觸發器沒有觸發,因爲Validation.HasError永遠不會從True - > False - > True改變。
有沒有人有任何這方面的經驗或一些建議如何強制觸發?
我有同樣的問題 - 你設法解決這個問題嗎? – pilsdumps 2011-03-22 14:47:59
不,從來沒有。仍在擾亂我。 – Thelonias 2011-03-24 15:18:21