下载app免费领取会员
<Window x:Class="ErrorsTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ErrorsTest"
mc:Ignorable="d"
Title="MainWindow" Height="268.884" Width="411.588">
<Window.Resources>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self},Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<TextBox x:Name="textBox" Text="{Binding Path= N,ValidatesOnNotifyDataErrors=True}"
HorizontalAlignment="Left" Height="23" Margin="97,92,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" >
</TextBox>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="217,158,0,0"
VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
}
public class ViewModel : INotifyDataErrorInfo,INotifyPropertyChanged
{
private Dictionary<string, List<string>> _errors = new Dictionary<string, List<string>>();
private int n = 0;
public int N
{
get
{
return n;
}
set
{
List<string> te = new List<string>();
if(value<0)
{
te.Add("不能小于0!");
}
if(value%2!=0)
{
te.Add("不能位奇数!");
}
SetErrors("N", te);
n = value;
}
}
public bool HasErrors
{
get
{
return _errors.Count != 0;
}
}
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public event PropertyChangedEventHandler PropertyChanged;
private void RaiseNotifyPropertyChanged(string name)
{
if(null!=PropertyChanged)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
private void SetErrors(string name,List<string> errors)
{
if (errors.Count == 0)
{
errors.Remove(name);
}
else
{
if (_errors.ContainsKey(name))
{
_errors[name] = errors;
}
else
{
_errors.Add(name, errors);
}
}
RaiseErrorsChanged(name);
}
private void RaiseErrorsChanged(string name)
{
if(ErrorsChanged!=null)
{
ErrorsChanged(this, new DataErrorsChangedEventArgs(name));
}
}
public IEnumerable GetErrors(string propertyName)
{
return _errors[propertyName];
}
}
本文版权归腿腿教学网及原创作者所有,未经授权,谢绝转载。