none
WPF TextBox Binding RRS feed

  • Frage

  • Hallo zusammen.

     

    Da ich relativ neu in WPF bin, habe ich ne Frage.

    Wäre net, wenn Ihr mir diese Frage beantworten könntet.

    Und habt bitte Nachsicht, wenn diese Frage für einige unter Euch als banal angesehen wird.

     

    Mein Projekt liegt im Namespace KFZOrtung

    Ich habe einige Klassen.

    Die spezielle Klasse um die es geht liegt im Namespace KFZOrtung.MyClasses

    Dies Klasse sieht im Prinzip so aus:

     

    namespace KFZOrtung.MyClasses
    {
     public class MyStrings
     {
      public static class MyTarifeIdentity
      {
       private static string _Benutzer = "";
       public static string Benutzer
       {
        get
        {
         _Benutzer = IniFile.IniReadValue("Tarife", "Benutzer", MyConnectionIdentity.IniPath);
         return _Benutzer;
        }
        set { IniFile.IniWriteValue("Tarife", "Benutzer", value, MyConnectionIdentity.IniPath); }
       }
      }
    }
    
    Nun hätte ich sehr gerne, das Bindung zur Klasse MyClasses.MyStrings.MyTarifIdentity > Benutzer hergestellt. Bekomme es aber nicht hin. Im XAML habe ich eingefügt:
     xmlns:MyClasses="clr-namespace:KFZOrtung.MyClasses"
     
     Bei den Resourcen:
    <Window.Resources>
        <my1:MyStrings x:Key="_MyStrings"></my1:MyStrings>
    <Window.Resources>
     
     Im Binding der Textbox:
    <TextBox Canvas.Left="196" Canvas.Top="41" Height="23" Name="textBoxTarifHandyNummer"
                     Style="{StaticResource TextBoxStyle}" Width="282" 
                     Text="{Binding Path=MyStrings.MyTarifeIdentity.Benutzer, Mode=TwoWay}" />
     
    Wäre echt nett, wenn mir das jemand erklären könnte.
    Viele Grüße und ein schönes Wochenende. 
     
     
     
     
     
    • Bearbeitet Ruediger42 Samstag, 21. Mai 2011 15:23 Korrektur
    Samstag, 21. Mai 2011 15:18

Antworten

  • Hab mir das nochmal angeschaut. Das Problem scheint die statische Hierarchie in deiner Klasse "MyStrings" zu sein.

    Folgendes funktioniert bei mir:

    xmlns:my1="clr-namespace:KFZOrtung.MyClasses"

            <TextBox x:Name="TextBox"
                     Text="{x:Static my1:MyStrings.Benutzer}"  />

        public static class MyStrings
        {
            public static class MyTarifeIdentity
            {

                private static string _Benutzer = "";
                public static string Benutzer
                {
                    get
                    {
                        _Benutzer = "Test2";
                        return _Benutzer;
                    }
                    set
                    {
                        _Benutzer = value;
                    }
                }
            }

            private static string _Benutzer = "";
            public static string Benutzer
            {
                get
                {
                    _Benutzer = "Test";
                    return _Benutzer;
                }
                set
                {
                    _Benutzer = value;
                }
            }
        }

    Generell würde ich dir empfehlen bei Bindungen keine statischen Klassen zu verwenden, da in den Klassen die INotifyPropertyChanged implementiert sein sollte, damit
    das Binding korrekt funktioniert...


    • Als Antwort markiert Ruediger42 Montag, 23. Mai 2011 10:57
    Montag, 23. Mai 2011 09:31
    Beantworter

Alle Antworten

  • Hallo Ruediger,

    da solche Fragen immer wieder mal gestellt werden, möchte ich dich einfach mal auf den folgenden Link verweisen:

    http://social.msdn.microsoft.com/Forums/de-DE/wpfde/thread/fa981403-ed8d-4d76-9a46-c170b7fad1ba

    Das müsste alle deine Fragen zum Binding beantworten. Ansonsten darfst du natürlich gerne Nachfragen ;)

    Viele Grüße
    Holger M. Rößler


    Viele Grüße Holger M. Rößler ++++++++++++++++++++++++++++++++++++++++++++++++++ Kaum macht man es richtig, schon funktioniert es ++++++++++++++++++++++++++++++++++++++++++++++++++
    Sonntag, 22. Mai 2011 08:33
  • Morgen Holger.

     

    Vielen Dank, hat mir schon weitergeholfen, aber es ist noch nicht klar.

    In WinForms komme ich gut klar, aber in WPF halt noch nicht.

    Ich würde mir manchmal wünschen, es gäbe ein Kochbuch!

     

    Beipiel:

    Wenn ich ein Gericht kochen will, das ich nicht kenne nehme ich ein Kochbuch, hole mir dir Zutaten und verfahre mit der Zubereitung wie im Buch beschrieben.

    So in der Art würde ich es mir auch manchmal wünschen.

    Das könnte man doch auch in die Programmierung übertragen!

     

    Sie wollen -> Binding an eine eigene Property-Klasse erstellen:

    Sie benöten: TextBox

    Sie müssen im Xaml eine Resource hinzufügen...

    Sie müssen dem Property (TextBox) folgende Ergänzung hinzufügen:

    ...

    Nach so einer Anleitung, könne man wunderbar zu einen Ergebnis kommen, und man könnte alles was man benötigt recherchieren.

     

    Deshalb meine expliziete Frage:

    In WinForms ist das Binding innerhalb von 1 Minute erstellt:

    Binding b = new Binding();
    MyStrings.MyTarifeIdentity t = new MyStrings.MyTarifeIdentity();
    b.Source = t;
    b.Path = new PropertyPath("Benutzer");
    textBoxTarifBenutzer.SetBinding(TextBox.TextProperty, b);
    

     

    WPF = Ich verstehe das leider noch nicht.

    Ich habe im binding meiner TextBox:

     Text="{Binding Source={StaticResource MyTarifIdentity}, Path=Benutzer}"
    

    Im Xaml habe ich die Resource eingefügt:

    xmlns:my1="clr-namespace:KFZOrtung.MyClasses" 
    

     <Window.Resources>
        <my1:MyStrings x:Key="MyTarifIdentity"/>
     </Window.Resources>
    

    Wenn ich das Binding per Code setze = alles wunderbar!

    Binding im Xaml = nix passiert!

     

    Wäre echt nett, wenn jemand antworten könnte.

     

    Viele Grüße

    Rüdiger

     

     

     

     

     

     

     

     

    Montag, 23. Mai 2011 07:16
  • Hi versuch mal folgendes:

    xmlns:my1="clr-namespace:KFZOrtung.MyClasses"

    <Window.Resources>
       <my1:MyStrings x:Key="MyStrings"/>
    </Window.Resources>
     
    Text="{Binding Source={StaticResource MyStrings.MyTarifeIdentity}, Path=Benutzer}"

    Montag, 23. Mai 2011 08:05
    Beantworter
  • Hi Marco.

     

    Danke für Dein Feedback.

    Habe es gleich ausprobiert.

    Bei: Source={StaticResource MyStrings.MyTarifeIdentity} kommt die Maldung: Warnung 5 Die Ressource "MyStrings.MyTarifeIdentity" konnte nicht aufgelöst werden. 

    So funktioniert das leider nicht.

     

    Und nu?

    Montag, 23. Mai 2011 08:43
  • Hab mir das nochmal angeschaut. Das Problem scheint die statische Hierarchie in deiner Klasse "MyStrings" zu sein.

    Folgendes funktioniert bei mir:

    xmlns:my1="clr-namespace:KFZOrtung.MyClasses"

            <TextBox x:Name="TextBox"
                     Text="{x:Static my1:MyStrings.Benutzer}"  />

        public static class MyStrings
        {
            public static class MyTarifeIdentity
            {

                private static string _Benutzer = "";
                public static string Benutzer
                {
                    get
                    {
                        _Benutzer = "Test2";
                        return _Benutzer;
                    }
                    set
                    {
                        _Benutzer = value;
                    }
                }
            }

            private static string _Benutzer = "";
            public static string Benutzer
            {
                get
                {
                    _Benutzer = "Test";
                    return _Benutzer;
                }
                set
                {
                    _Benutzer = value;
                }
            }
        }

    Generell würde ich dir empfehlen bei Bindungen keine statischen Klassen zu verwenden, da in den Klassen die INotifyPropertyChanged implementiert sein sollte, damit
    das Binding korrekt funktioniert...


    • Als Antwort markiert Ruediger42 Montag, 23. Mai 2011 10:57
    Montag, 23. Mai 2011 09:31
    Beantworter
  • Vielen Dank Marco,

     

    jetzt habe ich es verstanden!

    Dein angefügtes (echt toll beschrieben) Beispiel hat es mir veranschaulicht wo das Problem liegt.

    Jetzt habe ich endlich auch den Unterschied von statischen Klassen zu INotifyPropertyChanged endlich kappiert!

     

    Vielen Dank nochmal, auch an alle anderen die sich dem Thema angenommen hatten!

     

    Rüdiger

    Montag, 23. Mai 2011 11:02