2016-06-08 4 views
1

Ich habe eine Klasse Employee wie diese definiertC# PictureBox.Image DataBind auf Object 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 

} 

Und das ist meine Nutzung: Ich habe eine PictureBox Steuerelement mit dem Namen als pbPhoto und sein Image hat einen Standardwert von meiner Resources.Blank, die Eigenschaft ist zu Employee.Photo Eigentum innerhalb der Page_Load Ereignis datengebunden.

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

Aber es scheint nicht zu funktionieren und ich habe diese Fehlermeldung erhalten.

Der Wert kann nicht auf den gewünschten Typ formatiert werden.

+0

Der zweite Parameter sollte ein Objekt, nicht einen Typ – Mono

+0

enthalten Bitte überprüfen Sie die überarbeitete Frage. –

+0

Ich sehe nicht, wo Sie die Photo-Eigenschaft tatsächlich festlegen. Ich schätze, Sie können keine Bindung an eine Eigenschaft setzen, die Null zurückgibt – Mono

Antwort

0

ich nur Um dieses Problem zu lösen oben basierend auf Mono's comment,

Es gibt zwei verschiedenen Ansatz:

Zuerst vor pbPhoto.Image Eigenschaft Bindung Photo Eigenschaft Objekt Sie einen Standardwert employee.Photo zuweisen haben, da wir keine Bindungseigenschaft festlegen was einen null Wert zurückgibt.

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

Das andere ist Photo Eigenschaft Anfangswert in dem Employee Konstruktor einzustellen.

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

dann können Sie damit fortfahren.

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

dies durch eine sehr alte WinForms Daten verursacht fehlerhaftes Verhalten Bindung, die durch die Einstellung der Binding.FormattingEnabled Eigenschaft auf true festgelegt ist (leider für „Rückwärtskompatibilität“ vorbelegt ist es false):

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

Wenn Sie möchten Standardwert zuordnen, wenn die Datenquelle Eigenschaft null ist, können Sie die Binding.NullValue Eigenschaft:

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

Ich habe gerade meine Frage aktualisiert, diese löst mein Problem teilweise, aber meine 'PictureBox' hat einen Standard' Image' Wert und jedes Mal, wenn ich das Formular lade, verschwand das 'Image'. –

+0

Ich habe einen Fehler beim Konvertieren der 'employee.Photo'-Eigenschaft in 'byte []' 'Objektverweis nicht auf eine Instanz eines Objekts gesetzt, aber ich kann die ganze Menge davon erreichen, indem ich einfach das anfängliche Bild dem' Mitarbeiter' zuweise .Photo = Resources.Blank basierend auf @Mono Vorschlag in der Frage kommentieren unten. –