Binding an TextBox nicht möglich

  • WPF

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Jonas Jelonek.

    Binding an TextBox nicht möglich

    Hallo

    Leider musste ich gerade während meiner Programmiertätigkeiten feststellen, dass das Binding folgender Property an eine TextBox nicht so ganz funktioniert.

    C#-Quellcode

    1. public string DIMMInfo
    2. {
    3. get
    4. {
    5. StringBuilder sb = new StringBuilder();
    6. foreach (TweakAPI.Info.DIMM dimm in TweakAPI.Info.DIMM.EnumerateDIMMs())
    7. {
    8. sb.AppendLine(dimm.Bank);
    9. sb.AppendLine("Beschriftung: " + dimm.Caption);
    10. sb.AppendLine("Kapazität: " + ((dimm.Capacity / 1024) / 1024).ToString() + " MiB");
    11. sb.AppendLine("Datenbreite: " + dimm.DataWidth.ToString() + " Bits");
    12. sb.AppendLine("Beschreibung: " + dimm.Description);
    13. sb.AppendLine("Geräteposition: " + dimm.DeviceLocator);
    14. sb.AppendLine("Formfaktor: " + dimm.FormFactor);
    15. sb.AppendLine("Austauschbar im Betrieb: " + dimm.IsHotSwappable.ToString());
    16. sb.AppendLine("Hersteller: " + dimm.Manufacturer);
    17. sb.AppendLine("Speichertyp: " + dimm.MemoryType.ToString());
    18. sb.AppendLine("Modell: " + dimm.Model);
    19. sb.AppendLine("Name: " + dimm.Name);
    20. sb.AppendLine("Teilenummer: " + dimm.PartNumber);
    21. sb.AppendLine("Reihenposition: " + dimm.PositionInRow.ToString());
    22. sb.AppendLine("In Betrieb: " + dimm.IsPoweredOn.ToString());
    23. sb.AppendLine("Entfernbar im Betrieb: " + dimm.IsRemovable.ToString());
    24. sb.AppendLine("Seriennummer: " + dimm.SerialNumber);
    25. sb.AppendLine("SKU: " + dimm.SKU);
    26. sb.AppendLine("Geschwindigkeit: " + dimm.Speed.ToString() + " MHz");
    27. sb.AppendLine("Status: " + dimm.Status);
    28. sb.AppendLine("Gesamtbreite: " + dimm.TotalWidth.ToString() + " Bits");
    29. sb.AppendLine("Typdetail: " + dimm.TypeDetail.ToString());
    30. sb.AppendLine("Version: " + dimm.Version);
    31. sb.AppendLine("");
    32. sb.AppendLine("--------------------------------------");
    33. sb.AppendLine("");
    34. }
    35. return sb.ToString();
    36. }
    Beim Starten wird eine XamlParseException ausgelöst, Zusätzliche Informationen waren nur, dass diese in Zeile ... bei Spalte ... beim Festlegen der Text-Eigenschaft aufgetreten ist. An den Werten, die ich da Abfrage, liegt es nicht, diese funktionieren alle bspw. bei der Ausgabe in einer MessageBox.
    Wo liegt nun das Problem?

    Gruß

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

    Wenn du an eine Textbox bindest, sollte es auch einen Setter geben oder stelle alternativ den Mode auf OneWay bzw. nutze einen Textblock, wenn du den Text nur anzeigen willst.

    Hilft das nicht, gib im Get mal einfach einen fixen String zurück.

    Hilft das auch nicht, zeig mal den XAML-Code.
    Die TextBox habe ich auf ReadOnly gesetzt. Ein TextBlock eignet sich da nicht, da ich was zum Scrollen brauch.
    Wenn ich einen fixen String im Get zurückgebe, kommt auch der Fehler. Liegt es vielleicht am XAML-Code?

    XML-Quellcode

    1. <TextBox Text="{Binding DIMMInfo}" VerticalScrollBarVisibility="Auto" AcceptsReturn="True" TextWrapping="Wrap" Height="200" Width="400" Margin="30,180,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"></TextBox>
    Wie @sandiro schon gesagt hat, eine TextBox will bekommen und verändern. Das kannst du aber ändern, indem du den Binding-Mode setzt. Normalerweise ist dieser bei einer TextBox TwoWay. Wenn du ihn auf OneWay setzt, geht es nur von der Eigenschaft in die TextBox - dann ist es egal, ob da ein Setter existiert oder nicht. Es gibt noch weitere wie OneWayToSource, welcher nur verändert (also das gegenteil von OneWay). Den Mode setzt du so:

    XML-Quellcode

    1. <TextBox Text="{Binding DIMMInfo,Mode=OneWay}" ... />
    Mfg
    Vincent

    "Beim Festlegen der Eigenschaft "System.Windows.Controls.TextBox.Text" ist eine Ausnahme aufgetreten." oder so ungefähr, auf jeden Fall lässt sich aus der Fehlermeldung nicht erkennen, was wirklich schiefgelaufen ist.alle relevanten Infos der Meldung hatte ich bereits genannt.