在MVVM WPF应用程序上单击按钮显示验证
本文关键字:单击 按钮 显示 验证 程序上 应用程序 MVVM WPF 应用 | 更新日期: 2023-09-27 17:55:06
我的代码在页面加载时正常工作,但我希望只有在单击按钮时才能进行验证
模型Category.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Text;
System.Threading.Tasks;
namespace BillingApplication.Model
{
class Category : IDataErrorInfo, INotifyPropertyChanged
{
private short categoryId;
private string categoryName;
private string categoryCode;
//[Unqiue(ErrorMessage = "Duplicate Id. Id already exists")]
//[Required(ErrorMessage = "Id is Required")]
class Category : IDataErrorInfo, INotifyPropertyChanged
{
private short categoryId;
private string categoryName;
private string categoryCode;
//[Unqiue(ErrorMessage = "Duplicate Id. Id already exists")]
//[Required(ErrorMessage = "Id is Required")]
public short CatogoryId
{
get
{
return CatogoryId;
}
set
{
CatogoryId = value;
}
}
[Required(ErrorMessage = "Name is Required")]
public string CategoryName
{
//get { return GetValue(() => CategoryName); }
//set { SetValue(() => CategoryName, value); }
get
{
return categoryName;
}
set
{
categoryName = value;
NotifyPropertyChanged("CategoryName");
}
}
protected void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
// property changed
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
// send app message (mvvm light toolkit)
//if (message != null)
// message(this.IsValid);
}
}
[Required(ErrorMessage = "cODE is Required")]
public string CategoryCode
{
get
{
return categoryCode;
}
set
{
categoryCode = value;
NotifyPropertyChanged("CategoryCode");
}
}
#region IDataErrorInfo Members
string IDataErrorInfo.Error
{
get
{
return null;
//throw new NotImplementedException();
}
}
string IDataErrorInfo.this[string propertyName]
{
get
{
return GetValidationError(propertyName);
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
#region Validation
static readonly string[] ValidateProperties = { "CategoryName","CategoryCode" };
public bool IsValid
{
get
{
foreach (string property in ValidateProperties)
//{
if (GetValidationError(property) != null)
return false;
return true;
//}
}
}
string GetValidationError(string propertyName)
{
string error = null;
switch (propertyName)
{
case "CategoryName":
error = ValidateCategoryName();
break;
}
switch (propertyName)
{
case "CategoryCode":
error = ValidateCategoryCode();
break;
}
return error;
}
private string ValidateCategoryCode()
{
if (string.IsNullOrWhiteSpace(CategoryCode))
{
return "Category code Cannot be empty";
}
return null;
}
private string ValidateCategoryName()
{
if (string.IsNullOrWhiteSpace(CategoryName))
{
return "Category Name Cannot be empty";
}
return null;
}
#endregion
}
}
**viewModel**
*CategoryViewModel.cs*
using System;
using System.Collections.ObjectModel;`
using System.ComponentModel;
using System.IO;
using System.Windows;
using GalaSoft.MvvmLight;
using System.Xml.Serialization;
using BillingApplication.Model;
using System.Xml.Serialization;
using BillingApplication.Model;
class CategoryViewModel : INotifyPropertyChanged
{
public CategoryViewModel()
{
Category = new Category
{
CategoryName="",
CategoryCode=""
};
}
public Category Category
{
get;
set;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
Category.xaml
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlnsBig Grin | :-D ="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ignore="http://www.ignore.com"
xmlns:model="clr-namespace:BillingApplication.Model"
xmlns:views="clr-namespace:BillingApplication.Views"
mc:Ignorable="d"
xmlns:local="clr-namespace:BillingApplication.ViewModel"
Title="Category" Width="867.164" Height="532.836">
Text="{Binding Category.CategoryName, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left" Height="75" Margin="53,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="259"/>
<Label Content="{Binding ElementName=CategoryName,Path= (Validation.Errors).CurrentItem.ErrorContent}" FontFamily="calibri" Foreground="Red" HorizontalAlignment="Left" Margin="400,63,0,0" VerticalAlignment="Top"/>
Text="{Binding Category.CategoryCode, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="39" Margin="53,168,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="259"/>
您必须编写自己的验证器类及其相关模板。这是一个完整的指南