繁体   English   中英

C#PictureBox.Image DataBind到对象图像属性

[英]C# PictureBox.Image DataBind to Object Image Property

我有一个定义为这样的班级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

}

这是我的用法:我有一个名为pbPhotoPictureBox控件,其Image 具有Resources.Blank 的默认值 ,该属性已数据绑定到Page_Load事件中的Employee.Photo属性。

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

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

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

这是由非常古老的WinForms数据绑定错误行为引起的,该错误行为是通过将Binding.FormattingEnabled属性设置为true (不幸的是,“向后兼容性”默认为false ):

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

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

this.pbPhoto.DataBindings.Add("Image", employee, "Photo", true,
    DataSourceUpdateMode.OnValidation, Resources.Blank);

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

有两种不同的方法:

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

Employee employee = new Employee();
employee.Photo = Resources.Blank; // Initial value.
this.pbPhoto.DataBindings.Add("Image", employee, "Photo");

另一种是在Employee构造函数中设置Photo属性的初始值。

public Employee()
{
    this.Photo = Resources.Blank;
}

那么您可以继续进行此操作。

// During the program execution the Photo has an initial assigned value.
Employee employee = new Employee(); 
this.pbPhoto.DataBindings.Add("Image", employee, "Photo");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM