i have created validation but i want to show validation on button click ..in my application validation shown in if textbox is empty..i want show message in button ..
model
Category.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MVVMValidation.CustomValidationAttributes;
using MVVMValidation.Notification;
namespace BillingApplication.Model
{
class Category : IDataErrorInfo, INotifyPropertyChanged
{
private short categoryId;
private string categoryName;
private string categoryCode;
public short CatogoryId
{
get
{
return CatogoryId;
}
set
{
CatogoryId = value;
}
}
[Required(ErrorMessage = "Name is Required")]
public string CategoryName
{
get
{
return categoryName;
}
set
{
categoryName = value;
NotifyPropertyChanged("CategoryName");
}
}
protected void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
[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;
}
}
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 System.Xml.Serialization;
using BillingApplication.Model;
using GalaSoft.MvvmLight;
using MVVMValidation.Commands;
using MVVMValidation.Notification;
namespace BillingApplication.ViewModel
{
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));
}
}
}
}
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Xml.Serialization;
using BillingApplication.Model;
using GalaSoft.MvvmLight;
using MVVMValidation.Commands;
using MVVMValidation.Notification;
namespace BillingApplication.ViewModel
{
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
<window x:class="BillingApplication.Views.Category" xmlns:x="#unknown">
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: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">
<window.resources>
<!--
<window.resources>-->
<local:categoryviewmodel x:key="DataContext" xmlns:local="#unknown">
<grid datacontext="{StaticResource DataContext}" margin="10">
<textbox name="CategoryName" validation.errortemplate="{x:Null}">
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"/>
<Label Content="{Binding ElementName=CategoryCode,Path=(Validation.Errors).CurrentItem.ErrorContent}" FontFamily="calibri" Foreground="Red" HorizontalAlignment="Left" Margin="400,168,0,0" VerticalAlignment="Top" RenderTransformOrigin="7.533,0.823"/>
<textbox name="CategoryCode" validation.errortemplate="{x:Null}">
Text="{Binding Category.CategoryCode, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="39" Margin="53,168,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="259"/>
<!--<Label Content="{Binding ElementName=CategoryName,Path=(Validation.Errors).CurrentItem.ErrorContent}"/>-->
I want code for validation work in button click..pls help me