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,所以现在我使用了这个变体
提前感谢!
如果您想绑定到第一个西格玛值,如参数[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");