Динамическая проверка в WPF с использованием MVVM? - PullRequest
0 голосов
/ 17 сентября 2018

Как выполнить проверку ввода текстового поля в структуре wpf MVVM?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Вы должны реализовать интерфейс INotifyDataErrorInfo в вашей модели представления:

public class ViewModel : INotifyDataErrorInfo
{
    private readonly Dictionary<string, string> _validationErrors = new Dictionary<string, string>();

    private string _text;
    public string Text
    {
        get { return _text; }
        set
        {
            _text = value;
            //validate:
            if (_text?.Length < 3)
                _validationErrors[nameof(Text)] = "Too short...";
            ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(nameof(Text)));
        }
    }

    public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
    public bool HasErrors => _validationErrors.Count > 0;
    public IEnumerable GetErrors(string propertyName) =>
        _validationErrors.TryGetValue(propertyName, out string error) ? new string[1] { error } : null;
}

Представление:

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Window.DataContext>
        <local:ViewModel />
    </Window.DataContext>
    <StackPanel>
        <TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
    </StackPanel>
</Window>
0 голосов
/ 17 сентября 2018

проверьте это: https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-binding-validation и рассмотрите это: Validation.ErrorTemplate = "{StaticResource validationTemplate}"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...