C# + WPF - DependencyProperty <-> Textbox



  • Moin!

    Ich probier hier gerade mit diesen Dependency-Properties rum. Nun möchte ich eine DP in einer Textbox bearbeiten und zwar in beide Richtungen also:
    Textbox ändert Property und geänderte Property ändert Textbox.

    Meine Property sieht so aus:

    public static DependencyProperty TestoProperty =
            DependencyProperty.Register("TestoProperty", typeof(String), typeof(Window1), 
    new FrameworkPropertyMetadata("Default Text", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnTestoPropertyChanged, OnCoerceTestoProperty), OnValidateTestoProperty);
    
            public String Testo
            {
                get 
                { 
                    return (String)GetValue(TestoProperty); 
                }
    
                set 
                { 
                    SetValue(TestoProperty, value); 
                }
            }
    

    Mein XAML für die Textbox sieht so aus:

    ...
    <TextBox Height="23" Margin="93,51,97,0" Name="textBox1" VerticalAlignment="Top" Text="{Binding TestoProperty}" /> ...
    

    Ist das so korrekt? Ich finde überall nur Beispiele wie ein Control an den Text eines anderen Gebunden wird, aber nie direkt an eine explizit implementierte DependencyProperty. Der Code funktioniert nur leider so nicht. Weder die Textbox ändert sich bei Änderung der DP, noch andersrum. 😕



  • Hallo,

    das DP sieht prinzipiell ganz okay aus. Du definierst es ja anscheinend im Fenster wo sich auch die Textbox befindet oder? Du musst dabei drauf achten das die Bindings immer gegen den DataContext der für sie gilt, binden. Sprich, selbst wenn die TextBox sich in dem Window befindet wo du das DP definiert hast, bindet es nicht automatisch dagegen mit deinem verwendeten Binding. Du musst an geeigneter Stelle den DataContext explizit auf das Window setzen.



  • Wie mache ich das? Also diesen DataContext setzen?



  • Ist es denn so schwer mit dem passenden Stichwort selber mal nachzugucken? Die Klasse FrameworkElement definiert das DataContext Property.



  • Ich habe nur Beispiele in XAML gefunden, die ich allerdings nicht ganz verstehe. Dort wird der DataContext auf StaticResource irgendwas gesetzt. Wenn ich alles richtig verstanden habe, sollte ich den Namen meines Hauptfensters angeben, allerdings geht auch das nicht. Dann habe ich versucht, den Context aus dem Code heraus auf "this" zu setzen (In der Hauptfensterklasse) und siehe da - Es geht. Wie würde ich das nun in XAML schreiben? Und wieso ist das DataContext des Hauptfensters nicht automatisch "this" ?



  • Hallo,

    in XAML kann man das nicht schreiben. Im Code einfach this zuweisen ist schon richtig.

    Und wieso sollte es defaultmäßig this sein? Das Property wird ja nicht von Window deklariert wo die Angabe eventuell Sinn machen könnte, sondern viel allgemeiner von FrameworkElement und da macht es keinen Sinn den DataContext defaultmäßig auf this zu setzen.



  • Öhm ja, so langsam kapier ich das. Danke


Anmelden zum Antworten