C# 根据每个值更新2个字段,但每个字段也取决于其他属性值

C# 根据每个值更新2个字段,但每个字段也取决于其他属性值,c#,wpf,binding,C#,Wpf,Binding,我有两个文本字段,分别表示一个四边形的Xmin和Xmax值,这些值在myClass的构造函数上初始化 另外,我还有两个字段,Delta和Counter,它们必须根据Xmin和Xmax使用公式进行更新: this.Delta = (int)((this.Xmax - this.Xmin) / (this.Counter - 1)); 及 这似乎没有那么困难,但是如果其他更改,我想允许更新Delta和Counter,即如果Delta更改,则Counter更新,反之亦然 考虑Xmin和Xmax值 这

我有两个文本字段,分别表示一个四边形的
Xmin
Xmax
值,这些值在
myClass
的构造函数上初始化

另外,我还有两个字段,
Delta
Counter
,它们必须根据
Xmin
Xmax
使用公式进行更新:

this.Delta = (int)((this.Xmax - this.Xmin) / (this.Counter - 1));

这似乎没有那么困难,但是如果其他更改,我想允许更新
Delta
Counter
,即如果
Delta
更改,则
Counter
更新,反之亦然 考虑
Xmin
Xmax

这是我的

wpf 如何更新这两个元素或绑定它们,以便在修改另一个元素时修改它们,但要考虑
Xmin
Xmax
属性

我尝试将更新代码放入getter和setter中,但由于一个字段取决于
Xmin
Xmax
我得到了一个无限循环异常…

回答这个问题“当增量改变时如何更新计数器,反之亦然??” 更改增量值时通知计数器,更改计数器时通知增量。如果这个解决方案没有帮助,请让我知道

public int Delta
    {
        get { return gnDelta; }
        set { gnDelta = value; 
              OnPropertyChanged("Delta"); 
              OnPropertyChanged("Counter");}
    }
    public double Counter
    {
        get { return gnCounter; }
        set { gnCounter = value; 
            OnPropertyChanged("Counter");
            OnPropertyChanged("Delta"); }
    }

要避免无限循环,请确保传递的
确实与setter中的当前值不同,然后再执行其他操作:

public double Counter
{ 
    get { ... }
    set 
    {
        if (gnCounter != value)
        {  
            gnCounter = value;
            Delta = (int)((Xmax - Xmin) / (gnCounter  - 1));
            OnPropertyChanged("Counter");
        } 
    }
}
当然,您必须对
Delta
属性执行相同的操作

public partial class myClass : UserControl
{
    double gnXmin, gnXmax, gnCounter;
    int gnDelta;
    public event PropertyChangedEventHandler PropertyChanged;
    public double Xmin
    {
        get { return gnXmin; }
        set { gnXmin = value;  OnPropertyChanged("Xmin"); }
    }
    public double Xmax
    {
        get { return gnXmax; }
        set { gnXmax = value; OnPropertyChanged("Xmax");  }
    }
    public int Delta
    {
        get { return gnDelta; }
        set { gnDelta = value; OnPropertyChanged("Delta"); }
    }
    public double Counter
    {
        get { return gnCounter; }
        set { gnCounter = value; OnPropertyChanged("Counter"); }
    }
    public myClass(double _Xmin, double _Xmax)
    {
        this.Xmin  = _Xmin;
        this.Xmax = _Xmax;
        this.Counter  = 100;
        this.Delta = (int)((this.Xmax - this.Xmin) / (this.Counter - 1));
    }
    void OnPropertyChanged(string prop)
    {
        if (this.PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
    
}
public int Delta
    {
        get { return gnDelta; }
        set { gnDelta = value; 
              OnPropertyChanged("Delta"); 
              OnPropertyChanged("Counter");}
    }
    public double Counter
    {
        get { return gnCounter; }
        set { gnCounter = value; 
            OnPropertyChanged("Counter");
            OnPropertyChanged("Delta"); }
    }
public double Counter
{ 
    get { ... }
    set 
    {
        if (gnCounter != value)
        {  
            gnCounter = value;
            Delta = (int)((Xmax - Xmin) / (gnCounter  - 1));
            OnPropertyChanged("Counter");
        } 
    }
}