Как исправить ArgumentException при привязке к классу бизнес-логики - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь связать текстовое поле с моим классом бизнес-логики. В классе бизнес-логики я выкидываю ArgumentException, когда свойство (имя моего примера) пусто или равно нулю.

Это создает проблему: при загрузке usercontrol текстовое поле пустое без ошибок. Когда я набираю текстовое поле и снова удаляю этот текст, меня выталкивает из приложения с ArgumentException из моего бизнес-класса. Я понимаю, почему он это делает, но я хочу предотвратить это, показывая вместо этого окно сообщения с ошибкой.

Я пытался вместо того, чтобы выдавать новое исключение в моем бизнес-классе, показывая окно сообщения, но при попытке этого оно также отображается при загрузке пользовательского контроля. Это не то, что я ищу.

на мой взгляд:

<TextBox DockPanel.Dock="Top" Text="{Binding ManipulatedReservation.LastName, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, ValidatesOnExceptions=True}" Name="LastName"></TextBox>
<Button Grid.Column="2" Grid.Row="2" FontSize="20" Height="45" Command="{Binding SaveCommand}" Content="{x:Static properties:Resources.Save}"></Button>

в моем бизнес-классе:

        private String _lastName;


        public String LastName
        {
            get { return _lastName; }
            set
            {
                SetValue(ref _lastName, value);
                if (string.IsNullOrWhiteSpace(value))
                {
                    throw new ArgumentException("Lastname cannot be empty.");

                }
            }
        }

        public static Boolean IsValid(Reservation reservation)
        {
            Boolean isValid = true;
            try
            {
                Reservation testReservation = new Reservation() { ID = 
                reservation.ID, LastName = reservation.LastName};
            }
            catch (Exception)
            {
                isValid = false;
            }
            return isValid;
        }

код за моей кнопкой:

        SaveCommand = new RelayCommand(Save, CanSave);

        private bool CanSave()
        {
            try
            {
                return Business.Reservation.IsValid(ManipulatedReservation);
            }
            catch (Exception e)
            {
                ErrorHandler.ThrowError(0, e.Message);
                return false;
            }
        }

Я ожидаю, что не получит ошибку при загрузке в usercontrol (как это происходит сейчас), но я также не хочу получать необработанное исключение при вводе в мое текстовое поле и последующем его удалении.

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