mopuru surya

mopuru surya

  • NA
  • 6
  • 559

Validation of texbox wpf mvvm

Sep 13 2019 12:36 PM
public class ProductModel : NotifyPropertyChangeBase , IDataErrorInfo 2: { 3: public bool IsValidating = false; 4: 5: public Dictionary Errors = new Dictionary(); 6: 7: ...properties... 8: 9: public bool IsValid() 10: { 11: IsValidating = true; 12: try 13: { 14: NotifyPropertyChanged(() => Name); 15: NotifyPropertyChanged(() => Price); 16: NotifyPropertyChanged(() => Amount); 17: } 18: finally 19: { 20: IsValidating = false; 21: } 22: return (Errors.Count() == 0); 23: } 24: 25: public string Error 26: { 27: get { throw new NotImplementedException(); } 28: } 29: 30: public string this[string columnName] 31: { 32: get 33: { 34: string result = string.Empty; 35: if (!IsValidating) return result; 36: Errors.Remove(columnName); 37: switch (columnName) 38: { 39: case "Name": if (string.IsNullOrEmpty(Name)) result = "Name is required!"; break; 40: case "Price": if ((Price < 10) || (Price > 1000)) result = "Price must be between 10 and 1000"; break; 41: case "Amount": if ((Amount < 1) || (Amount > 100)) result = "Amount must be between 1 and 100"; break; 42: }; 43: if (result != string.Empty) Errors.Add(columnName, result); 44: return result; 45: } 46: } 47: 48: public ProductModel() 49: { 50: } 51: } private void SaveExecute() 2: { 3: Model.IsValid(); 4: } UserControl x:Class="WPFValidationApplication.Views.ProductForm" 2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6: xmlns:my="clr-namespace:WPFValidationApplication.Utils" 7: d:DesignHeight="300" 8: d:DesignWidth="448" 9: mc:Ignorable="d"> 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 81: public class ProductModel : NotifyPropertyChangeBase 2: { 3: private String name; 4: public String Name 5: { 6: get 7: { 8: return name; 9: } 10: set 11: { 12: name = value; 13: NotifyPropertyChanged(() => Name); 14: } 15: } 16: 17: private decimal price; 18: public decimal Price 19: { 20: get 21: { 22: return price; 23: } 24: set 25: { 26: price = value; 27: NotifyPropertyChanged(() => Price); 28: } 29: } 30: 31: private int amount; 32: public int Amount 33: { 34: get 35: { 36: return amount; 37: } 38: set 39: { 40: amount = value; 41: NotifyPropertyChanged(() => Amount); 42: } 43: } 44: } public partial class ProductForm : UserControl 2: { 3: public ProductForm() 4: { 5: InitializeComponent(); 6: this.DataContext = new ProductFormViewModel(); 7: } 8: } public class ProductFormViewModel : NotifyPropertyChangeBase 2: { 3: public ProductModel Model { get; set; } 4: 5: public ICommand SaveCommand { get; set; } 6: 7: public ProductFormViewModel() 8: { 9: Model = new ProductModel(); 10: SaveCommand = new DelegateCommand(SaveExecute); 11: } 12: 13: private void SaveExecute() 14: { 15: //dummy 16: } 17: } public class ProductModel : NotifyPropertyChangeBase 2: { 3: private String name; 4: public String Name 5: { 6: get 7: { 8: return name; 9: } 10: set 11: { 12: name = value; 13: NotifyPropertyChanged(() => Name); 14: } 15: } 16: 17: private decimal price; 18: public decimal Price 19: { 20: get 21: { 22: return price; 23: } 24: set 25: { 26: price = value; 27: NotifyPropertyChanged(() => Price); 28: } 29: } 30: 31: private int amount; 32: public int Amount 33: { 34: get 35: { 36: return amount; 37: } 38: set 39: { 40: amount = value; 41: NotifyPropertyChanged(() => Amount); 42: } 43: } 44: } My form doesnot show up any red border or error message on button click

Answers (2)