Databinding wie geht das
-
Hallo,
Ich habe folgendes Problem:Folgende Klasse sei gegeben
public class CustomerInfo { private string m_Name ; public string Name { get { return m_Name; } set { m_Name = value; } } private string m_Auftragsnummer ; public string Auftragsnummer { get { return m_Auftragsnummer; } set { m_Auftragsnummer = value; } } public CustomerInfo() { m_Auftragsnummer=null ; m_Name=null ; } public CustomerInfo(string Name,string Auftragsnummer) { m_Name=Name ; m_Auftragsnummer=Auftragsnummer ; } public CustomerInfo(string Name) :this(Name,null) { } }
Die Klasse lege ich in meine Form an und binde die beiden Properties Name und Auftragsnummer an zwei Textboxen
m_CustomerInfo=new CustomerInfo() ; // m_Customer ist Klassenelemnet des Forms this.m_textBoxCustom.DataBindings.Add("text",m_CustomerInfo,"Name") ; this.m_textBoxAuftragsNummer.DataBindings.Add("text",m_CustomerInfo,"Auftragsnummer") ;
Irgendwann später rufe ich eine Funktion auf, die mir ein neues Customer Object erstellt :
m_CustomerInfo=CustomerInfoBuilder.BuildFromXml(doc) ;
m_CustomerInfo enthält neue Werte, diese werden aber nicht in den Controls angezeigt, warum nicht und wie kann ich das Ganze am besten lösen.
-
Hallo,
sobald du ein neues Objekt anlegst, mußt du dieses auch wieder neu binden. Nur weil du denselben Variablennamen 'm_CustomerInfo' verwendest, so ist es doch nicht das gleiche Objekt.
Beim DataBinding wird aber eher davon ausgegangen, daß sich nur die Eigenschaften verändern. Und dazu sollte die Klasse die INotifyPropertyChanged-Schnittstelle implementieren: Gewusst wie: Implementieren der INotifyPropertyChanged-Schnittstelle
-
Du könntest das so machen:
public class DataForBinding:INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private CustomerInfo customer; public CustomerInfo Customer { get{return customer;} set { customer = value; if(PropertyChanged != null) PropertyChanged(this,new PropertyChangedEventArgs("Customer")); } } }
m_DataForBinding = new DataForBinding(); m_DataForBinding.Customer = new CustomerInfo() ; // m_DataForBinding ist Klassenelemnet des Forms this.m_textBoxCustom.DataBindings.Add("text",m_DataForBinding,"Customer.Name") ; this.m_textBoxAuftragsNummer.DataBindings.Add("text",m_DataForBinding,"Customer.Auftragsnummer") ;
m_DataForBinding.Customer =CustomerInfoBuilder.BuildFromXml(doc) ;
-
Danke an euch.
Die Idee von Benutzer_Name find ich ganz gut, werde das Ganze mal versuchen auf meine Bedürfnisse anzupassen.