C# 没有MVVM模式的wpf验证
我正在使用WPF并使用代码隐藏文件绑定DataContext。我不遵循MVVM或任何其他模式。我想在表单中添加验证。我使用data System.ComponentModel.DataAnnotations进行验证。下面是代码文件C# 没有MVVM模式的wpf验证,c#,wpf,validation,xaml,silverlight,C#,Wpf,Validation,Xaml,Silverlight,我正在使用WPF并使用代码隐藏文件绑定DataContext。我不遵循MVVM或任何其他模式。我想在表单中添加验证。我使用data System.ComponentModel.DataAnnotations进行验证。下面是代码文件 [PropertyChanged.ImplementPropertyChanged] public class Person : PropertyValidateModel { public long Id { get; set; } [Requir
[PropertyChanged.ImplementPropertyChanged]
public class Person : PropertyValidateModel
{
public long Id { get; set; }
[Required]
public string Name { get; set; }
public long Score { get; set; }
}
[PropertyChanged.ImplementPropertyChanged]
public abstract class PropertyValidateModel : IDataErrorInfo
{
// check for general model error
public string Error { get { return null; } }
// check for property errors
public string this[string columnName]
{
get
{
var validationResults = new List<ValidationResult>();
if (Validator.TryValidateProperty(
GetType().GetProperty(columnName).GetValue(this)
, new ValidationContext(this)
{
MemberName = columnName
}
, validationResults))
return null;
return validationResults.First().ErrorMessage;
}
}
}
我的XAML文件如下所示:
<Window x:Class="WPFDataContext.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel HorizontalAlignment="Left">
<TextBox Width="100" Text="{Binding Path=Name, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<TextBox Width="100" Text="{Binding Path=Score, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Button Name="btnSave" Click="btnSave_Click" Content="Save" ></Button>
</StackPanel>
</Grid>
这会将验证添加到表单中,但如果我想检查模型是否有效,那么如何检查?请帮助我,因为我没有获得在ModelState.IsValid的MVC模式中使用的IsValid属性。请提供帮助。您可以使用TextBox的lostfocus事件,例如,您希望对TextBox进行电子邮件验证 你的XAML
<TextBox x:Name="txtEmail1" Grid.Column="1" Grid.Row="7" MaxLength="70" Margin="0,5,5,0" Style="{StaticResource md-3s-textbox}" HorizontalAlignment="Left" LostFocus="TxtEmail1_LostFocus" >
你的代码隐藏了吗
public static bool IsValidEmail( string email)
{
string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.IsMatch(email);
}
private void TxtEmail1_LostFocus(object sender, RoutedEventArgs e)
{
if (IsValidEmail(txtEmail1.Text.ToString().Trim())==false)
{
txtEmail1.ToolTip = "Invalid Email";
txtEmail1.BorderBrush= System.Windows.Media.Brushes.Red;
}
}
为什么不使用MVVM?你必须非常努力才能摆脱它。我没有MVVM的基本知识,我的项目也不是在MVVM模式中构建的,所以请帮我解决这个问题。你能用WinForms代替WPF吗?不。没有MVVM模式,我不能用winform.WPF-没有这类东西。算了吧。也就是说,这里使用的是数据绑定,IDataErrorInfo,在我的书中是MVVM。