powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Validation и CanExecute
4 сообщений из 4, страница 1 из 1
Validation и CanExecute
    #39946903
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, не получается сделать валидацию вводимых данных в привязке с CanExecute команды.
Есть TextBox, в который можно вводить только целые числа и есть кнопка с командой, которая должна быть доступна, если ввод корректный.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<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="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        
        <TextBox  Grid.Row="0"
           FontSize="14"       
           Text="{Binding InputNumber, 
           UpdateSourceTrigger=PropertyChanged,
           ValidatesOnDataErrors=True}"
           Width="70" Height="30"/>

        <Button Grid.Row="1" Width="70" Height="30"
                Command="{Binding PrintCommand}" />
        
    </Grid>
</Window>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
public class ViewModel: BaseViewModel, IDataErrorInfo
    {
    public  RelayCommand PrintCommand { get; set; }

        #region Validation

        /// <summary>
        /// Хранение текста ошибок
        /// </summary>
        private Dictionary<string, string> errors = new Dictionary<string, string>();
        public string Error => throw new NotImplementedException();

        public string this[string columnName]
        {
            get
            {
                if (errors.ContainsKey(columnName))
                    return errors[columnName];
                return null;
            }
        }

        private void ValidateProperty([CallerMemberName] string propertyName = null)
        {
            var propValObj = this.GetType().GetProperty(propertyName).GetValue(this, null);

            if (propValObj is int propVal)
            {
                if (propVal == 0)
                {
                    errors.TryAdd(propertyName, "Error");
                }
                else
                {
                    errors.Remove(propertyName);
                }
            }
            PrintCommand.RaiseCanExecuteChanged();
        }
        #endregion

        private int _inputNumber;

        public int InputNumber
	{
	   get { return _inputNumber; }
	   set { _inputNumber = value; ValidateProperty(); }
	}

	public ViewModel()
	{
	PrintCommand = new RelayCommand((_)=>CustomCommand(),()=> CanCommandExecute());
	}

	private bool CanCommandExecute()
	{
            return !errors.Any();
        }

	private void CustomCommand(){}
}



Проблема в том, что если я стираю значение в TextBox, оставляю его пустым, setter для InputNumber не отрабатывает и получается противоречивая ситуация- во View в TextBox нет введеного значения, а во ViewModel хранится предыдущее корректное свойства InputNumber, которое делает команду доступной для выполнения.
Не помогает даже если применяю тип данных int? для свойства.Спасибо
...
Рейтинг: 0 / 0
Validation и CanExecute
    #39946953
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай свойство текстовым
...
Рейтинг: 0 / 0
Validation и CanExecute
    #39947078
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Validation и CanExecute
    #39947342
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,Сон Веры Павловны, спасибо за помощь.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Validation и CanExecute
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]