【问题标题】:C# - binding to class fieldC# - 绑定到类字段
【发布时间】:2014-04-30 21:57:14
【问题描述】:


我正在就 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 已初始化,我可以在那里看到 Parameter 字段。

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

【问题讨论】:

  • 为什么 Parameter[0].Sigma 在引号中?
  • 您赋予Parameter[0].Sigma 值的第三个参数应该是要绑定到的属性的名称。您提供的值不是属性名称。

标签: c# binding


【解决方案1】:

如果您想按照参数[0] 绑定的建议绑定到第一个 Sigma 值,最好的方法是向您的 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");

【讨论】:

    【解决方案2】:

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

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

    这将返回第一个信号,如果你没有,你有一个或一个零,然后你可以使用...进行绑定...

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

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2012-09-02
      • 2012-10-30
      • 1970-01-01
      • 2020-04-22
      • 2011-04-27
      • 2018-09-14
      • 1970-01-01
      相关资源
      最近更新 更多