これをできるだけ簡潔に保つようにします。
3 つのラジオ ボタンを使用した双方向のデータ バインディングがあるという問題があります。私の問題は、選択したラジオボタンを変更するとすぐに、一種の周期的な変更が発生することです。何が起こっているのか、ソース データ プロパティを変更するラジオ ボタンを変更しますが、ソース データ プロパティは、バインドされている他の 2 つのプロパティを変更します。これにより、他のラジオ ボタンが変更され、それらのプロパティでも PropertyChange 関数が呼び出されます。 . PropertyChange がラジオ ボタン スイッチごとに 1 回だけ発生するように修正するにはどうすればよいですか。
プロパティ変更イベント ハンドラ:
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");
フォーム画像: