在绑定课程时我做错了什么?

时间:2012-05-15 20:05:37

标签: c# winforms data-binding

我有一个名为PlatypusInfo的课程。

我调用一个返回该类实例的方法:

PlatypusInfo pi;
. . .
pi = MammalData.PopulateplatypusData(oracleConnectionMainForm, textBoxPlatypusID.Text);
. . .
public static PlatypusInfo PopulateplatypusData(OracleConnection oc, String platypusID) {

    int platypusABCID = getABCIDForDuckBillID(oc, platypusID);
    platypusInfo pi = new platypusInfo();

...但是得到这个错误的消息:" System.ArgumentException未处理   Message =无法绑定到DataSource上的属性或列platypusName。 参数名称:dataMember   来源= System.Windows.Forms的   PARAMNAME =数据成员"

...在这行代码中:

textBoxPlatypusID.DataBindings.Add(new Binding("Text", pi, "platypusName"));

我认为使用我的代码,PlatypusInfo类的platypusName成员(其实例是" pi")应该被分配给textBoxPlatypusID的Text属性。

所以我不正确地理解这一点,我是错误的,还是两者兼而有之?

2 个答案:

答案 0 :(得分:1)

您需要将其从字段更改为属性并添加INotifyPropertyChanged接口的实现。所以像这样:

public class PlatypusInfo : INotifyPropertyChanged
{         
    public event PropertyChangedEventHandler PropertyChanged;
    private String _PlatypusName;

    public String PlatypusName 
    { 
       get
       {
          return _PlatypusName;
       }
       set 
       {
          _PlatypusName = value;
          NotifyPropertyChanged("PlatypusName");
       }
    }

    private void NotifyPropertyChanged(String info)
    {
       PropertyChangedEventHandler property_changed = PropertyChanged;
       if (property_changed != null)
       {
          property_changed(this, new PropertyChangedEventArgs(info));
       }
    }
}

然后数据绑定看起来像这样:

textBoxPlatypusID.DataBindings.Add(new Binding("Text", pi, "PlatypusName"));

假设piPlatypusInfo对象。

答案 1 :(得分:0)

PlatypusInfo类是否实现了接口INotifyPropertyChanged