How to Enable/Disable Button on Validation using DelegateCommand of Prism
MainWindow.xaml
<Window x:Class="Wpf.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:Wpf"
mc:Ignorable="d">
<Window.Resources>
<ControlTemplate x:Key="TextBoxErrorStyle">
<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>
<StackPanel Orientation="Vertical" HorizontalAlignment="Left" >
<TextBox Height="30" Width="200" Text="{Binding Text,Mode=TwoWay,NotifyOnValidationError=True,
ValidatesOnDataErrors=True,UpdateSourceTrigger=PropertyChanged}"
Validation.ErrorTemplate="{StaticResource TextBoxErrorStyle}" Margin="5" />
<Button Content="Click Here" Command="{Binding ClickCommand}" Margin="10" Width="100"/>
</StackPanel>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext= new MainWindowViewModel();
}
}
MainWindowViewModel.cs
using Prism.Commands;
using Prism.Mvvm;
public class MainWindowViewModel : BindableBase, IDataErrorInfo
{
private string _text = string.Empty;
public string Text
{
get
{
return _text;
}
set
{
SetProperty(ref _text, value);
ClickCommand.RaiseCanExecuteChanged();
}
}
public string Error => string.Empty;
public string this[string columnName]
{
get
{
if (columnName == "Text")
{
if (string.IsNullOrEmpty(Text?.Trim()))
return "Text should not be empty";
}
return string.Empty;
}
}
private DelegateCommand _clickCommand;
public DelegateCommand ClickCommand
{
get
{
return _clickCommand = _clickCommand ?? new DelegateCommand(Click, () => !string.IsNullOrEmpty(_text));
}
}
private void Click()
{
//code
}
}
Comments
Post a Comment