WPF: привязка к ненулевым значениям при проверке - PullRequest
3 голосов
/ 08 июня 2011

рассмотрим следующий сценарий:

<TextBox Text="{Binding Price}"/>

вот свойство Price

public Decimal Price
    {
        get
        {
            return _Price;
        }
        set
        {
            if (_Price != value)
            {
                _Price = value;
                OnPropertyChanged("Price");
            }
        }
    }

этот метод проверяет мою собственность

private string validateGlassPrice()  
  {    
    if (GlassPrice <= 0)   
     {       
     return "price can't be 0 nor a minus value "; 
     } 
   else 
     {           
     return String.Empty;    
     }  
  }

этот метод проверяет мою собственностьесли оно было 0 или меньше - минус значение - теперь мне нужно проверить, является ли оно пустым или пустым, проблема в том, что Decimal не будет принимать значения, допускающие обнуление, любые обходные пути?

заранее спасибо

Ответы [ 3 ]

3 голосов
/ 08 июня 2011

Вы можете использовать Обнуляемый тип

В качестве альтернативы, если нежелательно изменять вашу модель, вместо этого свяжите свойство со своей моделью представления.

Как правило, я предпочитаю использовать строковые значения в модели представления для двойных / десятичных значений и помещать проверку в установщик свойства модели представления.Если передано недопустимое десятичное число, не обновляйте вспомогательное поле.

В соответствующей точке скопируйте значение свойства допустимой модели представления в вашу модель, например, непосредственно перед тем, как модель должна быть сохранена и т. Д., Иликогда экран закрывается.

1 голос
/ 08 июня 2011

Вместо использования функции проверки я бы использовал DataAnnotations. Вы можете создать пользовательский ValidationAttributes. Также взгляните на IDataErrorInfo в этой публикации Stackoverflow . Вы можете обработать ошибку ввода в вашем действии, чтобы отключить их, как в ICommand framework.

0 голосов
/ 09 июня 2011

Я выбрал обновленное решение devdigital, другое свойство String

public String PriceString
    {
        get
        {
            return _PriceString;
        }
        set
        {
            Decimal result;




            if (Decimal.TryParse(value, out result))
            {
                _PriceString = value;
                GlassPrice = result;

            }
            else
            {
                GlassPrice = -33322;
                _PriceString = value;
            }
            OnPropertyChanged("PriceString");
        }
    }

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

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