Entwickler-Ecke

Basistechnologien - Property DataBinding Values refreshen?


Christoph1972 - Mi 04.08.10 19:29
Titel: Property DataBinding Values refreshen?
Hallo Leute,

ich möchte z.B. eine TextBox an ein Property binden. Könnte mir jemand einen Hinweis geben, wir ich die Daten in der TextBox aktualisiere?

Bisher sieht das so aus:

Hier ist die Klasse, an dessen Property ich binden möchte.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public class BusinessObject :INotifyPropertyChanged 
{      
    public event PropertyChangedEventHandler PropertyChanged;           

    private string _Name = "";
    public string Name
    {
        get { return _Name; }
        set { _Name = value;
        if (PropertyChanged != null)
            PropertyChanged(thisnew PropertyChangedEventArgs("Name"));
        }
    }       
}


So binde ich.

C#-Quelltext
1:
textBox1.DataBindings.Add(new Binding("Text", business, "Name"));//business=Instanz von BusinessObject                    


Mich würde nun interessieren, wie ich eine Aktualisierung mittels PropertyChangedEvent erzwingen kann.

Für Hinweise & Tipps bin ich wie immer Dankbar.


Christian S. - Mi 04.08.10 19:36

Die Aktualisierung müsste doch automatisch erfolgen, wenn die Eigenschaft geändert wird? :gruebel:

Ansonsten: Da Du Events nicht "von außen" feuern kannst, müsstest Du ansonsten eine Methode schreiben:

C#-Quelltext
1:
2:
3:
4:
5:
public void RaisePropertyChanged(string PropertyName) {
  var tmp = PropertyChanged;
  if (tmp != null)
    tmp(this,  new PropertyChangedEventArgs(PropertyName));
}


Christoph1972 - Mi 04.08.10 21:57

Hi,

das Event ist kein Problem, wenn ich das Property ändere wird es ausgelöst, die TextBox wird jedoch nicht aktualisiert. Auch in die andere Richtung funktioniert es nicht, also wenn der Text in der TB geändert wird, wird der Set Block nicht angesprochen.

Habe ich den hier alles korrekt??

C#-Quelltext
1:
textBox1.DataBindings.Add(new Binding("Text", business, "Name"))                    


Christian S. - Mi 04.08.10 22:05

Du kannst mal einen der überladenen Konstruktoren der Binding-Klasse verwenden, in welchem man explizit den DataSourceUpdateMode setzen kann. Mit dem kannst Du regeln, wann Änderungen im Control in die Property "geschoben" werden.


Christoph1972 - Mi 04.08.10 22:48

Ok, danke für heute! Ich werde es mir morgen mal weiter anschauen.


Christoph1972 - Do 05.08.10 06:53

Vielen Dank für deine Hilfe!


C#-Quelltext
1:
textBox1.DataBindings.Add(new Binding("Text", business, "Name",false ,DataSourceUpdateMode.OnPropertyChanged ))