1.概要
1.1 说明
数据校验,如果数据不合适,有提示。
1.2 要点
- class User : IDataErrorInfo
- this.DataContext = user;
- <Window.Resources>
- <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"></Setter>
- Text="{Binding Path=Name,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}"
2.代码
2.1 xaml
<Window x:Class="WpfApp7.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:WpfApp7"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<local:User x:Key="usecheck"></local:User>
<Style TargetType="TextBox">
<Setter Property="Background" Value="#ddd"></Setter>
<Setter Property="Foreground" Value="Red"></Setter>
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<StackPanel.DataContext>
<Binding Source="{StaticResource usecheck}"></Binding>
</StackPanel.DataContext>
<WrapPanel>
<TextBlock Text="姓名"></TextBlock>
<TextBox Name="Name" Text="{Binding Path=Name,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
</WrapPanel>
<WrapPanel>
<TextBlock Text="年龄"></TextBlock>
<TextBox Name="Age" Text="{Binding Path=Age,ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}" Width="200"></TextBox>
</WrapPanel>
</StackPanel>
</Window>
2.2 code
using System.ComponentModel;
using System.Windows;
namespace WpfApp7
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
User user = new User();
public MainWindow()
{
InitializeComponent();
this.DataContext = user;
}
}
class User : IDataErrorInfo
{
public User()
{
this.Name = "dd";
this.Age = 20;
}
public string this[string columnName] {
get {
string ret = null;
switch (columnName)
{
case "Name":
if (this.Name.Length <2|| this.Name.Length>3)
{
return "不合格Name";
}
break;
case "Age":
if(this.Age<0|| this.Age > 200)
{
return "不合格Age";
}
break;
}
return null;
}
}
public String Name { get; set; }
public int Age { get; set; } = 0;
public string Error => throw new NotImplementedException();
}
}