C#依赖属性/属性强制

时间:2011-10-06 13:37:15

标签: c# dependency-properties

我有以下课程:

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));
    }        
}

问题:我不想让用户输入小于最小值的最大值,依此类推。但是当其他类在min / max值的默认值为零时尝试设置最小值/最大值时,上面的代码第一次不起作用。 因为默认情况下,最小值和最大值将为零,如果设置了最小值> 0在逻辑上是正确的,但不允许约束。 我想我需要使用依赖属性或强制来解决这个问题。任何人都可以指导这样做吗?

3 个答案:

答案 0 :(得分:2)

将_Max初始化为Double.MaxValue,_Min初始化为Double.MinValue。

答案 1 :(得分:1)

你可以用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));
    }
}

答案 2 :(得分:0)

我不知道我是否理解正确,但您可以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");
            }
        }
    }