[英]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
}
这是我的用法:我有一个名为pbPhoto
的PictureBox
控件,其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.