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.


Anmelden zum Antworten