Validation By Annotation in Wpf using MVVM

View

 <Window x:Class="WpfPrismTutorial.Views.MainWindow"
        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:local="clr-namespace:WpfPrismTutorial"
        mc:Ignorable="d"
        prism:ViewModelLocator.AutoWireViewModel="True"
        xmlns:prism="http://prismlibrary.com/"
        xmlns:valid="clr-namespace:WpfPrismTutorial.Validations"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <ControlTemplate x:Key="errorTemplate">
            <StackPanel Orientation="Horizontal">
            <AdornedElementPlaceholder x:Name="ErrorHolder" >
                <Border BorderBrush="red" BorderThickness="1" />
            </AdornedElementPlaceholder>
            <TextBlock  Text="{Binding [0].ErrorContent}" VerticalAlignment="Center" HorizontalAlignment="Right" Foreground="Red"/>
        </StackPanel>

        </ControlTemplate>
    </Window.Resources>
    <Grid VerticalAlignment="Center" HorizontalAlignment="Left">
     
        <StackPanel Orientation="Horizontal" Grid.Row="1">
            <TextBlock Text="Validation by Annotation" Margin="5,5"/>
            <TextBox Text="{Binding MainWindowModel.ValidationByAnnotation,UpdateSourceTrigger=PropertyChanged,
                       ValidatesOnExceptions=True}" Validation.ErrorTemplate="{StaticResource errorTemplate}"  Height="30" Width="300"/>
        </StackPanel>
   
    </Grid>
</Window>

ViewModel 

public class MainWindowViewModel : BindableBase
    {
        private MainWindowModel mainWindowModel = new MainWindowModel();

        public MainWindowModel MainWindowModel
        {
            get { return mainWindowModel; }
            set { SetProperty(ref mainWindowModel, value); }
        }
  }

Model

 public class MainWindowModel : BindableBase
    {
          #region Validation By Annotation

        private string _validationByAnnotation;
        [Required(ErrorMessage = "Validation By Annotation should not empty")]
        public string ValidationByAnnotation
        {
            get { return _validationByAnnotation; }

            set
            {
                Validate(value, "ValidationByAnnotation");
                SetProperty(ref _validationByAnnotation, value);
            }
        }
        private void Validate<T>(T value, string propertyName)
        {
            Validator.ValidateProperty(value, new ValidationContext(this, null, null)
            {
                MemberName = propertyName
            });
        }
        #endregion

    }

Comments

Popular posts from this blog

Pagination of DataGrid in WPF using MVVM

Connect SQL Server Database to WPF Application and Perform CRUD Operations

Filter DataGrid and ListView in wpf using ICollectionView