C#-绑定到类字段

本文关键字:字段 绑定 C#- | 更新日期: 2023-09-27 18:01:12


我正在寻求有关C#中数据绑定的帮助
我有几个班:

[Serializable()]
public class Norma 
{
    public BindingList<NormElement> Parameter;
    public Norma()
    {
        Parameter = new BindingList<NormElement>();
    }
    public string Name { get; set; }
}
[Serializable()]
public class NormElement
{
    public decimal M { get; set; }
    public decimal Sigma { get; set; }
}

所以,当Norma对象N(=newNorma(((在构造函数中形成时,我正在执行以下操作:

normBindingSource.DataSource = N;
textBox1.DataBindings.Add("Text", normBindingSource, "Name");

它有效
但当我试图像这样绑定时,它不会:

normBindingSource.DataSource = N;
textBox1.DataBindings.Add("Text", normBindingSource, "Name");
textBox2.DataBindings.Add("Text", normBindingSource, "Parameter[0].Sigma");

我做错了什么?在绑定之前,我会检查参数列表中是否填写了数字,在这里都可以。在调试中,我看到normBindingSource.DataSource被初始化,我可以看到那里的Parameter字段。

为了在这里取得成功,我尝试了很多选项,一开始Parameter字段只是数组,但后来我发现它应该是INotifyPropertyChanged,所以现在我使用了这个变体
提前感谢!

C#-绑定到类字段

如果您想绑定到第一个西格玛值,如参数[0]绑定所建议的,最好的方法是向您的Norma类添加一个属性:

public class Norma 
{
    public decimal FirstSigma{get{return Parameters[0].Sigma;}} //add setter if needed
    ....

并与之结合:

textBox2.DataBindings.Add("Text", normBindingSource, "FirstSigma");

如果您想对参数列表进行单独的绑定,则应该为列表创建一个单独的绑定源

textBox2.DataBindings.Add("Text", aBindingSourceToParametersList, "Sigma");

绑定仅适用于属性,并且您正试图访问隐藏在IEnumerable容器内的属性内的值(不支持(。你想做的是将其提取到一个属性中,稍后可以将其绑定到该属性中,就像这样…

public decimal Sigma
{
    get { return Parameter.Count > 0 ? Parameter[0].Sigma : 0m; }
}

这将返回第一个信号,如果没有,则为1或0,然后可以使用。。。

textBox2.DataBindings.Add("Text", normBindingSource, "Sigma");