[c#] simple databinding van een textbox

Pagina: 1
Acties:

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een formulier, met een knop (button1) en een textbox (textbox1).

De constructor van het form (form1):
C#:
1
2
3
4
5
public Form1()
{
     InitializeComponent();
     textBox1.DataBindings.Add("Text", this, "TestString");
}


TestString property:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
private string _TestString;
        
public string TestString
{
     get
     {
           return _TestString;
     }
     set
     {
          _TestString = value;
     }
}


Als ik de text in de textbox verander en de focus verlies, verstanderd mijn _TestString. Als ik door button1 in te drukken de property TestString verandert, wordt dit niet toonbaar in de textbox.
(button1 vernader TestString naar "test", "test" is dan niet zichtbaar.

Hoe kan ik de property veranderen zodat hij ook op het scherm verandert?

[ Voor 6% gewijzigd door elgringo op 21-06-2007 10:14 ]

if broken it is, fix it you should


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je in de eventhandler van je knop het volgende doet:
C#:
1
2
3
4
protected void button1_Click(object sender, EventArgs e) {
    this.TestString = "foo!";
    this.textbox1.DataBindings[0].ReadValue();
}


Het probleem is namelijk dat een property geen notification geeft dat de waarde veranderd is.

[ Voor 18% gewijzigd door MTWZZ op 21-06-2007 11:17 ]

Nu met Land Rover Series 3 en Defender 90


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
MTWZZ schreef op donderdag 21 juni 2007 @ 11:15:
Als je in de eventhandler van je knop het volgende doet:
C#:
1
2
3
4
protected void button1_Click(object sender, EventArgs e) {
    this.TestString = "foo!";
    this.textbox1.DataBindings[0].ReadValue();
}


Het probleem is namelijk dat een property geen notification geeft dat de waarde veranderd is.
En kun je die notification nog op een andere manier krijgen dan een readvalue()?

if broken it is, fix it you should


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Je kunt natuurlijk vanuit je property een TestStringChanged event maken, dat af laten gaan en via een handler gewoon de tekst van die property zetten.
Normaal is het zo dat bindings op List types wel notifications bieden. Denk bijvoorbeeld aan een binding naar een DataTable.

Nu met Land Rover Series 3 en Defender 90


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
MTWZZ schreef op donderdag 21 juni 2007 @ 11:26:
Je kunt natuurlijk vanuit je property een TestStringChanged event maken, dat af laten gaan en via een handler gewoon de tekst van die property zetten.
Normaal is het zo dat bindings op List types wel notifications bieden. Denk bijvoorbeeld aan een binding naar een DataTable.
Dat weet ik, maar ik ben wat aan het experimenteren...

if broken it is, fix it you should


  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Ik vind net via MSDN een artikeltje over de INotifyPropertyChanged interface die er voor zorgt dat de binding welk kan zien dat er eea veranderd.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class test : INotifyPropertyChanged {
    private string testString;
    public string TestString {
        get { return this.testString; }
        set {
            this.testString = value;
            OnPropertyChanged("TestString");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name) {
        if(this.PropertyChanged != null) {
            this.PropertyChanged(this, new PropertyChangedEventArgs(name));
        }
    }
}


Als je dit op je form implementeerd zal die binding dus zien wanneer de value van TestString veranderd omdat het PropertyChanged event afgaat.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1