我在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,所以现在我来到这个变种。<登记/> 提前谢谢!
答案 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");