【问题标题】:DataBinding Radio Buttons数据绑定单选按钮
【发布时间】:2014-12-04 15:19:35
【问题描述】:

我会尽量保持简洁。

我遇到了一个问题,我有一个带有 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");

表格图片:

【问题讨论】:

  • 你知道你只有1个吗?你需要 3 个。
  • @Blam 哎呀,我省略了 get 以减少代码。好像我错过了一个。
  • 不要减少作为问题核心部分的代码。否则,绑定将失败,问题在于绑定。
  • 你不应该骑自行车。奇怪的事情正在发生。尝试在 XAML 中绑定并发布。
  • 我不知道如何在 XAML 中进行绑定。我没有 XAML 来绑定它。

标签: c# .net data-binding radio-button 2-way-object-databinding


【解决方案1】:

首先尝试将其添加到所有设置器中

if (_domain == value) return;

因此,如果 OnPropertyChanged 没有改变,您就不会调用它。
一般来说,这是一个很好的做法。

第二个(仅当第一个不起作用时)将每个按钮放在一个单独的组中,这样它们就不会互相调用并在后面的代码中处理将其他按钮设置为 false。

【讨论】:

  • 每个单选按钮?还是单选按钮组?
  • 第一次尝试了吗?如果第一个不起作用,请仅尝试第二个。在第二个,每个按钮都在一个单独的组中(因此它们不在同一个组中)。
  • 我发现单选按钮实际上不在组框中。但是,现在单选按钮无法正确切换,并导致其他问题。我想我可能只是手动实现单选按钮更新。
猜你喜欢
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多