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