2016-06-08 2 views
1

У меня есть класс Employee определен как этоC# PictureBox.Image DataBind на объект Image Property

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

Второй параметр должен содержать объект, а не тип – Mono

+0

. Проверьте пересмотренный вопрос. –

+0

Я не вижу, где вы на самом деле устанавливаете свойство Фото. Я думаю, вы не можете установить привязку к свойству, которое возвращает null – Mono

ответ

0

Я просто решить эту проблему, основанную на 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"); 

Другой является, чтобы установить свойство Photo начальное значение в Employee конструктора.

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"); 
2

Это вызвано очень старых данных WinForms привязки поведение багги, которая фиксируется путем установки Binding.FormattingEnabled свойство true (к сожалению для «обратной совместимости» по умолчанию это false):

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

Если вы хотите, чтобы связать значение по умолчанию, когда свойство источника данных имеет нулевое значение, вы можете использовать Binding.NullValue свойства:

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

Я только что обновил свой вопрос, этот частично решает мою проблему, но мой «PictureBox» имеет значение «Image» по умолчанию и всякий раз, когда я загружаю форму, «Image» исчез. –

+0

У меня возникла ошибка при преобразовании свойства 'employee.Photo' в' byte [] '' ссылка на объект, не установленная на экземпляр объекта ', но я мог бы достичь всего этого, просто присваивая исходный образ 'employee .Photo = Resources.Blank' на основе предложения @Mono в вопросительном комментарии ниже. –

Смежные вопросы