#c# #dependency-properties
#c# #зависимость-свойства
Вопрос:
У меня есть следующий класс:
public class Numbers :INotifyPropertyChanged
{
private double _Max;
public double Max
{
get
{
return this._Max;
}
set
{
if (value >= _Min)
{
this._Max = value;
this.NotifyPropertyChanged("Max");
}
}
}
private double _Min;
public double Min
{
get
{
return this._Min;
}
set
{
if (value <= Max)
{
this._Min = value;
this.NotifyPropertyChanged("Min");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Проблема: я не хочу разрешать пользователю вводить максимальное значение меньше минимального значения и так далее. Но приведенный выше код не работает в первый раз, когда другой класс пытается установить минимальное / максимальное значение, когда минимальное / максимальное значение по умолчанию равно нулю.
Поскольку по умолчанию минимальное и максимальное значения будут равны нулю, если минимальное значение установлено> 0, что логически правильно, но ограничение не позволяет этого делать.
Я думаю, мне нужно решить это с помощью зависимого свойства или принуждения. Может ли кто-нибудь помочь это сделать?
Комментарии:
1. Почему min и max имеют значение по умолчанию 0? почему бы не удвоить. Умножение и удвоение. Максимальное удвоение?
Ответ №1:
Инициализируйте _Max для Double.MaxValue, _Min для Double .Минимальное значение.
Ответ №2:
Вы могли бы поддержать его значением Null, чтобы оно стало таким:
public class Numbers : INotifyPropertyChanged
{
private double? _Max;
public double Max
{
get
{
return _Max ?? 0;
}
set
{
if (value >= _Min || !_Max.HasValue)
{
this._Max = value;
this.NotifyPropertyChanged("Max");
}
}
}
private double? _Min;
public double Min
{
get
{
return this._Min ?? 0;
}
set
{
if (value <= Max || !_Min.HasValue)
{
this._Min = value;
this.NotifyPropertyChanged("Min");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Комментарии:
1. Я протестировал, но он работает не так, как ожидалось. В конечном итоге это позволяет пользователю вводить максимальное значение меньше минимального значения.
Ответ №3:
Я не знаю, правильно ли я вас понимаю, но у вас может быть private bool
указание, устанавливается ли значение в первый раз и, таким образом, переопределяет проверку.
из моей головы:
private bool _FirstTimeSet = false;
private double _Max;
public double Max
{
get
{
return this._Max;
}
set
{
if (value >= _Min || _FirstTimeSet == false)
{
this._FirstTimeSet = true;
this._Max = value;
this.NotifyPropertyChanged("Max");
}
}
}