我会尽量保持这种简洁。
我遇到了一个问题,我有一个带3个单选按钮的双向数据绑定。我的问题是,一旦我更改所选的单选按钮,我就会发生一些周期性的变化。所以发生了什么,我更改了更改源数据属性的单选按钮,但源数据属性更改了绑定的其他2个属性,这又改变了其他单选按钮,这些按钮也调用了这些属性上的PropertyChange函数。 。如何修复它,以便每个单选按钮切换只发生一次PropertyChange。
属性更改事件处理程序:
public class SolutionOptions : INotifyPropertyChanged
{
bool _direct;
bool _iterative;
bool _domain;
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public bool Domain
{
get { return _domain; }
set
{
if (_domain == value) return;
_domain = value;
OnPropertyChanged("Domain");
}
}
public bool Iterative
{
get { return _iterative; }
set
{
if (_iterative == value) return;
_iterative = value;
OnPropertyChanged("Iterative");
}
}
public bool Direct
{
get { return _direct; }
set
{
if (_direct == value) return;
_direct = value;
OnPropertyChanged("Direct");
}
}
数据绑定代码:
this.radioButton_DirectSolver.DataBindings.Add("Checked", _ssf, "SolOptions.Direct");
this.radioButton_IterSolver.DataBindings.Add("Checked", _ssf, "SolOptions.Iterative");
this.radioButton_DomainDecomp.DataBindings.Add("Checked", _ssf, "SolOptions.Domain");
表格图片:
答案 0 :(得分:0)
首先尝试将此添加到所有设置者
if (_domain == value) return;
因此,如果不改变,则不要调用OnPropertyChanged 这是一般的好习惯。
第二个(仅当第一个按钮不起作用时)将每个按钮放在一个单独的组中,这样它们就不会相互调用并在后面的代码中处理其他按钮为假。