недавно я начал работать с wpf и mvvm и я столкнулся с проблемой, которую мне не удается решить еще.
В моем ViewModel у меня есть один Nullable<decimal>
bindeado с видом в xaml.
public class Ejemplo: BaseViewModel<Ejemplo>
{
public decimal? Test {get; set;}
}
И bindeo в xaml следующего способа:
<TextBox Text="{Binding Path=Test, UpdateSourceTrigger=PropertyChanged}"/>
То, что функционирует без какой-либо проблемы.
Тема состоит, в том, что в момент ввождения не действительной стоимости, утверждение в xaml случается автоматически (например, когда пишут букву).
То, к чему я стремлюсь, состоит в том, чтобы мочь реагировать на эту ошибку внутри меня ViewModel
, чтобы так мочь изменять другие свойства, когда стоимость Test
он ошибочный (как например выводить кнопку из строя.)
Я попробовал делать это следующим способом
private decimal? mTest;
public decimal? Test
{
get => mTest;
set
{
try
{
mTest = value;
OnPropertyChanged(m => m.Test);
}
catch
{
//Realizo la limpieza de la que hablo..
throw;
}
}
}
Но, для моего сюрприза, Сеттер Test
никогда он не работает.
Как он был бы должен делать, чтобы реагировать перед этим?
Для sobrescribir conversiГіn по умолчанию, который он реализует wpf, ты должен осуществлять IvalueConverter: В твоем XML deberГ-схвати иметь что-то asГ-:
<Grid>
<Grid.Resources>
<my:DecimalConverter x:Key="DecimalConverter"></my:DecimalConverter>
</Grid.Resources>
<TextBox Text="{Binding Path=Test, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource DecimalConverter}}"/>
</Grid>
И осуществлять IValueConverter:
class DecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
///Tu código iría aquí
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
///Tu código iría aquí
}
}
, С которым podrГЎs контролировать ее conversiГіn по умолчанию в ту, которая ты ссылаешься, но с другой стороны, чтобы давать возможность или выводить кнопки из строя, я обычно осуществляю INotifyDataErrorInfo
и соединяю свойство IsEnabled кнопок в HasError
. В XAML контроля ты должен иметь ValidatesOnDataErrors=True, и реализовывать ее implementaciГіn интерфейса в cГіdigo (я обычно осуществляю ее в базовом классе для viewModel)