C# - 绑定到类字段

时间:2014-04-30 13:34:52

标签: c# binding


我在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(= new Norma())在构造函数中形成时,我正在做以下事情:

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被初始化,我可以在那里看到参数字段。

我已经尝试了很多选项在这里取得成功,在开始时参数字段只是数组,但后来我发现它应该是INotifyPropertyChanged,所以现在我来到这个变种。<登记/> 提前谢谢!

2 个答案:

答案 0 :(得分:0)

如果要绑定到第一个Sigma值,如参数[0]绑定所示,最好的方法是向Norma类添加属性:

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

并绑定到:

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

如果要对参数列表进行单独绑定,则应为列表创建单独的bindingsource

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

答案 1 :(得分:0)

绑定仅适用于属性,并且您尝试访问隐藏在属性inside of an IEnumerable container内的值(不受支持)。你想要做的是将它提取到一个你可以在以后绑定它的属性,就像这样......

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

这将返回第一个信号,如果你没有,那么你可以使用它来绑定...

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