Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
WPF-MVVM: Methode an eine Textbox binden
wickedcsharper
myCSharp.de - Member

Avatar #avatar-3141.jpg


Dabei seit:
Beiträge: 167
Herkunft: Köln

Themenstarter:

WPF-MVVM: Methode an eine Textbox binden

beantworten | zitieren | melden

Hallo zusammen,

bin relativ neu in WPF. Das Umdenken von WinForms zu WPF fällt mir relativ schwer.
Die ganze WPF Geschichte wirkt schwerfällig und sperrig- aber egal...Arbeitgeber will WPF...ich muss es umsetzen. Folgende Situation: Ich habe eine Klasse Person mit der Methode getName und will das Ergebnis der Methode (den Vor- und Zunamen) an eine Textbox binden. Suche jetzt seit einer Stunde im Netz und finde nix was mit VS2012 funktioniert. Kann doch nicht wahr sein


namespace CustomNamespacesInXAML
{
    public class Person
    {
        public string Nachname { get; set; }
        public string Vorname { get; set; }


        public Person()
        {
            //Nachname = "Schmitz";
            //Vorname = "Torsten";
        }

        public string getName()
        {
            return this.Vorname + " " + this.Nachname;
        }
    }
}

und in xaml:

    <Window.Resources>
        <local:Person x:Key="Person" Vorname="Torsten" Nachname="Schmitz" />
        <ObjectDataProvider x:Key=[B]"Pers"[/B]
       ObjectType="{x:Type local:Person}"
       MethodName="getName"/>
    </Window.Resources>

    <TextBox Text="{Binding [B]Pers[/B]}" HorizontalAlignment="Left" Height="50" Margin="59,78,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200"/>


ER malt die Textbox schreibt aber nix rein.

Wie bindet man denn nun die Methode einer Klasse an eine Textbox? Wäre für Hilfe dankbar.
„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7581
Herkunft: Waidring

beantworten | zitieren | melden

Hallo wickedcsharper,

mach doch eine Eigenschaft Name (od. ähnlich, Fullname, etc) und binde diese an die TextBox.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Biete die Person auf einer Klasse (Dein ViewModel) als Property an.

Dann setzt du den DataContext des Xamls auf dein ViewModel.

Dann kannst du dein Binding machen.

Das sagt aber auch jedes MVVM/WPF-Tutorial :)

PS: Das GetName kannst du in ein Property machen, auf das du dann wieder binden kannst.
private Nachricht | Beiträge des Benutzers
wickedcsharper
myCSharp.de - Member

Avatar #avatar-3141.jpg


Dabei seit:
Beiträge: 167
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Danke für die Vorschläge...
MVVM wollte ich für diese Beispiel nicht gleich implementieren, wenngleich das natürlich für ein Projekt ratsam ist.

Das ganze über eine Propertie zu machen kam mir zwar auch schon in den Sinn, aber das beantwortet ja nicht die Frage, wie man Funktionsrückgaben an ein Controll bindet.
Gibts dafür keine "BestPraxis". Das mit dem Propertie scheint mir so ein WorkArround

Gruß
„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Lies dir mal ein MVVM-Tutorial durch. Das ist nunmal der Weg, wie MVVM im WPF läuft. ViewModel als DataContext und auf Properties bietet man an, was man anbieten möchte.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10084

beantworten | zitieren | melden

@wickedcsharper:
Zitat
Das mit dem Propertie scheint mir so ein WorkArround
Dann hast du es komplett falsch verstanden.

Tu dir selber einen gefallen und hör auf in WindowsForms zu denken denn so wie du es hier versuchst ist es natürlich schwerer.

Ich persönlich möchte nie mehr auf WindowsForms zurück.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4198

beantworten | zitieren | melden

Hallo wickedcsharper,

lies dir mal Gewusst wie: Binden an eine Methode durch. Mit dem ObjectDataProvider bist du schon auf dem richtigen Weg - du mußt jetzt nur noch das Binding bei der Textbox korrekt durchführen (siehe dir dazu das Beispiel an).
Probiere also mal:

<TextBox.Text>
    <Binding Source="{StaticResource Pers}"
             BindsDirectlyToSource="true" UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>

Auch das Binden an eine Methode widerspricht nicht dem MVVM (gerade wenn man noch Parameter berücksichtigen muß).
Im obigen Beispiel ist sicherlich eine VM-Eigenschaft einfacher, aber zum Lernen und Verstehen ist es gut, wenn man auch diesen Weg beherrscht.
private Nachricht | Beiträge des Benutzers
wickedcsharper
myCSharp.de - Member

Avatar #avatar-3141.jpg


Dabei seit:
Beiträge: 167
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

@Th69
ich versuchs mit dem DataProvider und dem richtigen Binding an die TextBox. ich denke hier liegt das Problem.

@Fzelle: Die Antwort ist Quatsch mit Soße -
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von wickedcsharper am .
„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2461
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Zitat von wickedcsharper
@Fzelle: Die Antwort ist Quatsch mit Soße -

Nein ist sie nicht. So wie du es probierst läuft MVVM nunmal nicht. Ist klar, dass MVVM dann mühsam erscheint.
private Nachricht | Beiträge des Benutzers
Ezio
myCSharp.de - Member

Avatar #avatar-3575.png


Dabei seit:
Beiträge: 196

beantworten | zitieren | melden

[offtopic]
Zitat
@Fzelle: Die Antwort ist Quatsch mit Soße -
Auch wenn ich verstehen kann, dass die Antwort von FZelle nicht deine Frage direkt trifft, so ist aber deine Reaktion unangemessen.
FZelle hat recht, wenn er dir sagen will, dass die Denkweise für WinForms und WPF/MVVM komplett unterschiedlich sind.
Erfahrungen in WinForms sind oft sogar hinderlich, wenn man sich in WPF/MVVM reindenken muss.
Und ob man nun WinForms oder WPF bevorzugt ist neben Anforderung des Chefs oder der Kunden und dem Wissen dass WinForms immer mehr als veraltet gilt einfach auch Geschmackssache.
Über letzteres zu Diskutieren führt am Ziel vorbei.

-Edit: Eindeutigkeit des ersten Satzes angepasst. [/offtopic]
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ezio am .
private Nachricht | Beiträge des Benutzers