C # зависимое свойство / приведение свойства - PullRequest
0 голосов
/ 06 октября 2011

У меня есть следующий класс:

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, что является логически правильным, но ограничение не позволяет это делать.Я думаю, что мне нужно решить эту проблему, используя зависимое свойство или принуждение.Кто-нибудь может это сделать?

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Инициализируйте _Max для Double.MaxValue, _Min для Double.MinValue.

1 голос
/ 06 октября 2011

Вы можете подкрепить его Nullable, чтобы оно стало таким:

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));
    }
}
0 голосов
/ 06 октября 2011

Я не знаю, правильно ли я вас понимаю, но у вас может быть 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");
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...