我有一个类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");
但它似乎不起作用,我收到此错误消息。
无法将值格式化为所需类型。
答案 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;
}