2011-10-06 81 views
0

我有下面的類: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)); 
    }   
} 

問題:我不想讓用戶輸入最大值小於最小值等。但是,當最小/最大值的默認值爲零時,其他班級嘗試設置最小值/最大值時,上面的代碼第一次不工作。 由於默認情況下最小值和最大值將爲零,如果min值設置爲> 0,這在邏輯上是正確的,但不允許約束。 我想我需要解決這個使用依賴屬性或強制。任何人都可以指導做到這一點?

+1

爲什麼最小值和最大值爲0默認?爲什麼不Double.MinDouble和Double.MaxDouble? –

回答

1

所以它成爲你可以通過一個可空支持它這樣的:

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

謝謝。這是我的預期。 – Suresh

+0

我已經測試過,但不能按預期工作。它最終允許用戶輸入小於最小值的最大值。 – Suresh

2

將_Max初始化爲Double.MaxValue,_Min爲Double.MinValue。

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