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.“
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!"
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.
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.“
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.
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@wickedcsharper:
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.
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.
@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 -
„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“
@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.
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@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.