@DarkByte2015

Биндинг к свойству типа double + валидация?

Я использую для валидации вот такой класс:
public abstract class ViewModelBase : INotifyPropertyChanged, IDataErrorInfo
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        private readonly HashSet<string> PropertiesWithErrors = new HashSet<string>();
 
        protected bool HasValidationErrors { get { return PropertiesWithErrors.Any(); } }
 
        public string this[string propertyName] { get { return Validate(propertyName); } }
 
        public string Error { get { throw new NotImplementedException(); } }
 
        protected virtual string Validate(string propertyName)
        {
            var value = GetType().GetProperty(propertyName).GetValue(this);
            var results = new List<ValidationResult>();
            var context = new ValidationContext(this, null, null) { MemberName = propertyName };
 
            if (!Validator.TryValidateProperty(value, context, results))
            {
                PropertiesWithErrors.Add(propertyName);
                return results.First().ErrorMessage;
            }
 
            PropertiesWithErrors.Remove(propertyName);
            return string.Empty;
        }
 
        protected virtual void RaisePropertyChanged(string pname) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pname));
 
        protected virtual void Set<T>(string pname, ref T field, T value)
        {
            field = value;
            RaisePropertyChanged(pname);
        }
    }

Нужно только отнаследовать от него ViewModel и создать свойство для биндинга. Это очень удобно, т.к. сразу ясно есть ли ошибки валидации. Но у меня такая проблема. Если у меня свойство типа double то у меня полностью перестают вводиться точки и запятые. Как же мне поставить дробную точку (или запятую)?

Ну например:
public class ViewModel : ViewModelBase
{
    public double Value { get; set; }
}


<TextBox Text="{Binding Path=Value, ValidatesOnExceptions=True, UpdateSourceTrigger=PropertyChanged}"/>


Кроме того при работе с этой ViewModel-ю перестают работать всякие полезные атрибуты из System.ComponentModel.DataAnnotations аля Range и т.п. Почему так происходит?
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы