Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据绑定单选按钮_C#_.net_Data Binding_Radio Button_2 Way Object Databinding - Fatal编程技术网

C# 数据绑定单选按钮

C# 数据绑定单选按钮,c#,.net,data-binding,radio-button,2-way-object-databinding,C#,.net,Data Binding,Radio Button,2 Way Object Databinding,我会尽量使这篇文章简明扼要 我有一个问题,我有一个双向数据绑定与3个单选按钮。我的问题是,只要我改变选择的单选按钮,我就会得到某种周期性的改变。因此,我改变了单选按钮,它改变了源数据属性,但是源数据属性改变了其他两个绑定的属性,这反过来又改变了其他单选按钮,它也对这些属性调用了PropertyChange函数。如何修复它,使每个单选按钮开关的属性更改只发生一次 属性已更改事件处理程序: public class SolutionOptions : INotifyPropertyChanged {

我会尽量使这篇文章简明扼要

我有一个问题,我有一个双向数据绑定与3个单选按钮。我的问题是,只要我改变选择的单选按钮,我就会得到某种周期性的改变。因此,我改变了单选按钮,它改变了源数据属性,但是源数据属性改变了其他两个绑定的属性,这反过来又改变了其他单选按钮,它也对这些属性调用了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");
表格图像:


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

if (_domain == value) return;
因此,如果属性未更改,则不调用OnPropertyChanged。
总的来说,这是一种良好的做法


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

每个单选按钮?或者单选按钮组?你试过第一个吗?只有在第一个不起作用时才尝试第二个。在第二组中,每个按钮都在一个单独的组中(因此它们不在同一组中)。我发现单选按钮实际上不在组框中。但是,现在单选按钮无法正确切换,并导致其他问题。我想我可以手动实现单选按钮更新。你知道你只有一个get吗?你需要3个。@Blam-Oops,我省略了get以减少代码。好像我漏掉了一个。不要减少代码,这是问题的核心部分。否则绑定将失败,问题是绑定。你不应该让循环继续。奇怪的事情正在发生。尝试在XAML中绑定并发布。我不知道如何在XAML中绑定。我没有绑定它的XAML。