C#PictureBox.Image DataBind到Object Image属性

时间:2016-06-08 08:11:54

标签: c# winforms data-binding

我有一个类Employee定义为此

public class Employee : INotifyPropertyChanged
{
     private Image photo;


     public Image Photo
     {
            get { return photo; }
            set { photo = value; InvokePropertyChanged(new PropertyChangedEventArgs("Photo")); }
     }


    #region Implementation of INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void InvokePropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, e);
    }

    #endregion

}

这是我的用法:我的PictureBox控件名为pbPhoto,其图片的默认值来自Resources.Blank,属性为数据绑定到Employee.Photo事件中的Page_Load属性。

Employee employee = new Employee();
this.pbPhoto.DataBindings.Add("Image", employee, "Photo");

但它似乎不起作用,我收到此错误消息。

  

无法将值格式化为所需类型。

2 个答案:

答案 0 :(得分:2)

这是由一个非常古老的WinForms数据绑定错误行为引起的,通过将Binding.FormattingEnabled属性设置为true来修复(不幸的是"向后兼容性"默认情况下它是{ {1}}):

false

如果要在数据源属性为null时关联默认值,可以使用Binding.NullValue属性:

this.pbPhoto.DataBindings.Add("Image", employee, "Photo", true);

答案 1 :(得分:0)

我刚刚根据上面的Mono's comment解决了这个问题,

有两种不同的方法:

首先,在将pbPhoto.Image属性绑定到对象Photo属性之前,您必须为employee.Photo分配一个默认值,因为我们无法设置一个返回{{{}的绑定属性。 1}}值。

null

另一个是在Employee employee = new Employee(); employee.Photo = Resources.Blank; // Initial value. this.pbPhoto.DataBindings.Add("Image", employee, "Photo"); 构造函数中设置Photo属性初始值。

Employee

然后你可以继续这样做。

public Employee()
{
    this.Photo = Resources.Blank;
}
相关问题