TextBox-Inhalt wird nicht "erkannt"

  • WPF

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    TextBox-Inhalt wird nicht "erkannt"

    Hallo, ich habe ein merkwürdiges Problem...würde das gerne aus der Welt schaffen

    Ich habe zwei TextBoxen (WPF), von diesen Textboxen kann man den Inhalt speichern (in eine .txt-Datei), das klappt auch...

    C#-Quellcode

    1. public void OnSpeichern(object sender, RoutedEventArgs e)
    2. {
    3. Microsoft.Win32.SaveFileDialog dialog = new Microsoft.Win32.SaveFileDialog();
    4. dialog.Filter = "Txt-Files(*.txt)|*.txt";
    5. Nullable<bool> result = dialog.ShowDialog();
    6. if (result == true)
    7. {
    8. File.WriteAllText(dialog.FileName, hostNameFeld.Text);
    9. }
    10. Nullable<bool> result2 = dialog.ShowDialog();
    11. if (result2 == true)
    12. {
    13. File.WriteAllText(dialog.FileName, portnummerFeld.Text);
    14. }
    15. }


    jetzt kann man beim nächsten öffnen das gespeicherte wieder laden...das klappt auch

    C#-Quellcode

    1. public void OnLaden(object sender, RoutedEventArgs e)
    2. {
    3. Microsoft.Win32.OpenFileDialog dialogo = new Microsoft.Win32.OpenFileDialog();
    4. dialogo.Filter = "Txt-Files(*.txt)|*.txt";
    5. Nullable<bool> result = dialogo.ShowDialog();
    6. if (result == true)
    7. {
    8. hostNameFeld.Text = File.ReadAllText(dialogo.FileName);
    9. }
    10. Nullable<bool> result2 = dialogo.ShowDialog();
    11. if (result2 == true)
    12. {
    13. portnummerFeld.Text = File.ReadAllText(dialogo.FileName);
    14. }
    15. }


    Wenn ich jetzt aber auf den "Startknopf" klicke erkennt er nicht, dass etwas in den Textboxen drinsteht...Es ist für mich zwar sichtbar (Text in der Textbox) aber das Programm erkennt den Inhalt der Textboxen erst, wenn ich nochmal in jede der beiden Textboxen rein klicke...muss ich da noch was machen, dass er das auch erkennt ohne, dass ich extra nochmal klicke oder was mach ich falsch?


    Verschoben nach WPF
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    ja ich lade etwas in die textboxen...das wird dann von einer anderen methode (dem klicken auf nen button) über ein binding abgerufen

    C#-Quellcode

    1. ​public string StringContent
    2. {
    3. get { return base.GetValue(() => StringContent); }
    4. set { base.SetValue(() => StringContent, value); }
    5. }
    6. public string ipAddress { get; set; }
    7. public string portNumber { get; set; }
    8. public ICommand GetDataCommand
    9. {
    10. get { return new Cbefehl(OnClick); }
    11. }
    12. public void OnClick()
    13. {
    14. try
    15. {
    16. string rmAddres = null;
    17. rmAddres = "net.tcp://" + ipAddress + ":" + portNumber + "/IvertragAsynchron";


    hier hole ich beim Button-Klick den "Content" ab

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Runshak“ ()

    Entweder Binding verwenden, oder direkt auf die TextBoxen zugreifen. Aber nicht mischen.
    Ich vermute mal, im XAML ist beim Binding nicht UpdateSourceTrigger=PropertyChanged eingestellt.
    Das bedeutet, wenn Du die DependencyProperty über die CLR-Property änderst, wird zwar das PropertyChanged-Event ausgelöst, standardmäßig wird das Binding aber bei LostFocus geupdated.

    Implementiere im ViewModel das INotifyPropertyChanged-Interface und bau die Properties so um:

    C#-Quellcode

    1. public string ipAddress { get; set; }
    2. // So:
    3. private string _ipAddress;
    4. public string ipAddress
    5. {
    6. get
    7. {
    8. return _ipAddress;
    9. }
    10. set
    11. {
    12. if (_ipAddress != value)
    13. {
    14. _ipAddress = value;
    15. OnPropertyChanged("ipAddress");
    16. }
    17. }
    18. }

    Und verwende anschließend nur noch die ipAddress-Property im ViewModel, ohne direkt auf die TextBoxen zuzugreifen.
    Wobei hier OnPropertyChanged das NotifyPropertyChanged-Event mit dem angegebenen Namen auslöst. Das Interface ist ziemlich selbsterklärend.
    Ich glaube, es gibt im Framework sogar eine ViewModel-Klasse, die Du als Basisklasse verwenden kannst.

    PS: Kleingeschriebene Properties sehen meiner Meinung nach immer etwas komisch aus ;)
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils