在WPF中单击验证按钮

在WPF中单击验证按钮,wpf,wpf-controls,wpf-4.0,Wpf,Wpf Controls,Wpf 4.0,我正在处理WPF应用程序。在我的应用程序中,有不同的表单保存数据。我想在点击按钮或失去控制焦点时验证数据。我希望WPF验证像ASP.Net验证一样工作。 我不知道加载页面后表单是否有效。它应该只在用户失去控制焦点或用户单击按钮时进行验证。 我在谷歌上做了很多研发工作。但我确实找到了任何合适的安装解决方案 请帮助我。在本例中,我向您展示了两个带有验证的文本框 XAML编码 <TextBlock Text="Throw Exception in Property" Grid.Colum

我正在处理WPF应用程序。在我的应用程序中,有不同的表单保存数据。我想在点击按钮或失去控制焦点时验证数据。我希望WPF验证像ASP.Net验证一样工作。

我不知道加载页面后表单是否有效。它应该只在用户失去控制焦点或用户单击按钮时进行验证。

我在谷歌上做了很多研发工作。但我确实找到了任何合适的安装解决方案


请帮助我。

在本例中,我向您展示了两个带有验证的文本框

XAML编码

    <TextBlock Text="Throw Exception in Property" Grid.Column="1" Grid.Row="0" VerticalAlignment="Center" FontSize="22" Foreground="Chocolate" />
    <TextBlock Text="Name " Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="15" Foreground="DarkGreen" />
    <TextBlock Text="Age" Grid.Column="0" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="15" Foreground="DarkGreen" />

    <TextBox Name="txtName" Grid.Row="1" Grid.Column="2" HorizontalAlignment="Left" Width="170" Height="30" Background="Azure" Text="{Binding Path=pName,Mode=TwoWay,ValidatesOnExceptions=True}"/>
    <TextBox Name="txtAge" Grid.Row="2" Grid.Column="2" HorizontalAlignment="Left" Width="170" Height="30" Background="Azure" Text="{Binding Path=pAge,Mode=TwoWay,ValidatesOnExceptions=True}"/>
    <Button Name="btnSubmit" Content="Submit" Grid.Row="4" Height="30" Click="btnSubmit_Click"/>

C#编码

private void页面\u已加载(对象发送方,路由目标)
{
学生s=新学生();
this.DataContext=s;
}
公共班级学生:InotifyProperty已更改
{
字符串名;
智力年龄;
公共字符串pName
{
收到
{
返回名称;
}
设置
{
if(string.IsNullOrWhiteSpace(value))
{
抛出新ArgumentException(“必须输入名称字段”);
}
名称=值;
OnPropertyChanged(“pName”);
}
}
公共int页
{
收到
{
回归年龄;
}
设置
{
if(!Regex.IsMatch(value.ToString(),“[0-9]”)
{
抛出新ArgumentException(“年龄字段必须为数字。”);
}
如果(值<18 | |值>100)
{
抛出新ArgumentException(“年龄字段必须为18-100。”);
}
年龄=价值;
OnPropertyChanged(“第页”);
}
}
公共事件属性更改事件处理程序属性更改;
公共void OnPropertyChanged(字符串数据)
{
if(PropertyChanged!=null)
{ 
PropertyChanged(此,新PropertyChangedEventArgs(数据));
}
}
}
    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        Student s = new Student();
        this.DataContext = s;
    }

    public class Student : INotifyPropertyChanged
    {
        string name;
        int age;

        public string pName
        {
            get 
            {
                return name;
            }

            set
            {
                if (string.IsNullOrWhiteSpace(value))
                {
                    throw new ArgumentException("Name field must be enterd.");
                }
                name = value;
                OnPropertyChanged("pName");
            }
        }

        public int pAge
        {
            get
            {
                return age;
            }
            set
            {
                if(!Regex.IsMatch(value.ToString(),"[0-9]"))
                {
                    throw new ArgumentException("Age field must be in number.");
                }

                if(value < 18 || value > 100)
                {
                    throw new ArgumentException("Age field must be 18-100.");
                }

                age = value;
                OnPropertyChanged("pAge");
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(string data)
        {
            if (PropertyChanged != null)
            { 
                PropertyChanged(this,new PropertyChangedEventArgs(data));
            }
        }

    }