Validation By Exception 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">
<TextBlock Text="Validation by Exception" Margin="5,5"/>
<TextBox Text="{Binding MainWindowModel.ValidationByException,UpdateSourceTrigger=PropertyChanged,
ValidatesOnExceptions=True}" Validation.ErrorTemplate="{StaticResource errorTemplate}" Height="30" Width="300"/>
</StackPanel>
</Grid>
</Window>
Model
public class MainWindowModel : BindableBase
{
#region Validation By Exception
private string _validationByException = string.Empty;
public string ValidationByException
{
get { return _validationByException; }
set
{
if (string.IsNullOrEmpty(value))
throw new Exception("Validation By Exception should not empty");
SetProperty(ref _validationByException, value);
}
}
#endregion
}
<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">
<TextBlock Text="Validation by Exception" Margin="5,5"/>
<TextBox Text="{Binding MainWindowModel.ValidationByException,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 Exception
private string _validationByException = string.Empty;
public string ValidationByException
{
get { return _validationByException; }
set
{
if (string.IsNullOrEmpty(value))
throw new Exception("Validation By Exception should not empty");
SetProperty(ref _validationByException, value);
}
}
#endregion
}
Comments
Post a Comment