Захватывать ошибку превращения в wpf mvvm

недавно я начал работать с 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 никогда он не работает.

Как он был бы должен делать, чтобы реагировать перед этим?

1
задан 18.03.2019, 20:15
1 ответ

Для 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)

2
ответ дан 02.12.2019, 05:28