Я пытаюсь связать текстовое поле с моим классом бизнес-логики. В классе бизнес-логики я выкидываю 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 (как это происходит сейчас), но я также не хочу получать необработанное исключение при вводе в мое текстовое поле и последующем его удалении.