Hallo,
Ich bin ziemlich neu in WPF und versuche gerade ein Fenster zu aktualisieren ...
was nicht so funktioniert wie ich es mir vorstelle.
Vielleicht ist es möglich mir das Prinzip zu erklären, da bei mir gerade alles durcheinander gewirbelt wird ...
Ich habe ein Fenster mit mehreren Radiobuttons, Checkboxen und einem TabControl erstellt, dieses Fenster wird erzeugt und soll dann aktualisiert werden.
D.h. ich führe eine Methode in der aufrufenden Klasse aus und je nach Ergebnis solln die Controls im Fenster das Ergebnis anzeigen (Radio bzw Checkbox ...).
Aber wie übergebe ich die Daten ich habe ja keine Button oder sonstiges auf dem View?
Dann noch ne Frage: kann ich mehr als ein ViewModel für einen View haben? Wie binde ich die dann den View?
Anita
ich verstehe nicht ganz was du mit aktualisieren meinst O.o
Meinst du, dass sich der Zustand der CheckBox sich in deinem ViewModel (ich hoffe du verwendest MVVM) ändert du diese Änderung aber nicht mitbekommst?
-> INotifyPropertyChanged und DataBinding
Dann noch ne Frage: kann ich mehr als ein ViewModel für einen View haben?
Die Frage ist hier, was möchtest du damit erreichen?
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Ich glaube du solltest dir die Grundlagen von WPF anschauen.
So wie ich das verstehe geht es dir um das Ein/ausblenden von Inhalten in einem Fenster.
Das geht im einfachsten Falle indem du Elementen im XAML einen Namen gibst:
<TextBox Name="tb"/>
und im Code kannst du daraufhin auf die Elemente zugreifen:
tb.Visibility = Visibility.Visible;
Das ist die "einfachste" Variante, aber WPF bietet hierbei ganz andere Konzepte an um solche Szenarien wie von die gewünscht umzusetzen. Schau dir einfach ein paar Tutorials dazu an.
Kontakt & Blog: www.giesswein-apps.at
Hallo LatinChriz,
die von dir vorgeschlagene Variante entspricht nicht dem MVVM-Pattern ohne das man bei WPF nicht weit kommt. Ich glaube nicht, dass es hilft, wenn der Thread-Ersteller damit anfängt.
Hallo AnitaMerz,
wenn du mit MVVM anfängst, schau dir bitte das angesprochene MVVM-Pattern an.
WPF-Anwendungen mit dem Model-View-ViewModel-Entwurfsmuster
Binde direkt im XAML auf deine Properties, die das ViewModel dir anbietet. Zu deiner Frage: Nein, eine View hat genau einen DataContext. Jedoch kannst du auf diesem ja die beiden anderen Viewmodels anbieten. Und dich beim binding einfach zu dem ViewModel/Service/Provider/Info etc-Objekt navigieren, der dir die Infos zum binden gibt.
INotifyPropertyChanged sorgt sich, wie ProGamer schon sagte, um die Aktualisierung von deinen Infos auf der View.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
@Coffeebean: Jap du hast Recht, hab das wohl überlesen, dass Sie sich mit MVVM bereits beschäftigt. Klang für mich nach einer Basic Frage und da werfe ich ungern jemanden sofort MVVM an den Kopf...
Ps. ... du willst nicht wissen welche Firmen ohne MVVM schon wie weit "gekommen" sind 😃
Kontakt & Blog: www.giesswein-apps.at
Hallo zusammen,
Danke für die schnellen Antworten.
Vielleicht habe ich mich auch nicht gut ausgedrückt - das Fenster das ich öffne soll modal sein und nach einer bestimmten Zeit (nach dem letzten aktualisierungs Vorgang) von selbst schliesen, auf dem Fenster selbst findet keine Aktion statt.
In der Zwischenzeit soll es den aktuellen Stand der Verarbeitung anzeigen ähnlich einer ProgressBar ... nur mit Checkboxen, Textboxen und dem TabControl.
Nachdem ich das Fenster per ShowDialog() geöffnet habe, komme ich nicht mehr weiter. Muss ich da evtl. mit TPL rangehen? Oder reicht wie Coffeebean und ProGamer sagten der Einsatz von INotifyPropertyChanged aus?
Vielleicht könntet ihr mir sowas wie ein grobes Ablaufdiagram vorgeben, wie die einzelnen Klassen in diesem Fall zusammen verwendet werden sollten.
Anita
Hi AnitaMerz,
ShowDialog blockiert den GUI-Thread solange, bis das geöffnete Fenster wieder geschlössen wird. Es gibt verschiedene Lösungen, so ein Statusfenster anzuzeigen (einfach mal Googlen), die eleganteste ist wahrscheinlich der BusyIndicator aus dem Extended WPF Toolkit.
Christian
Weeks of programming can save you hours of planning
Hi MrSparkle,
da hab ich mich selbst ausgebremst - danke für den Hinweis, werd mir das sofort mal anschauen.
Anita
In der Zwischenzeit soll es den aktuellen Stand der Verarbeitung anzeigen ähnlich einer ProgressBar
Suchst du soetwas wie einen Splashscreen?
SplashScreen-Komponente (noch eine ;-P)
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Hi,
schein auf den ersten Blick, dass ich genau sowas gesucht habe - werde es mir anschauen und evtl. mit WPF versuchen ..
Danke euch allen für die tolle Unterstützung.
Anita
Meines Erachtens ist es nicht sinnvoll, eine Windows-Form-Komponente nach WPF zu übersetzen, da WPF in vielen Details völlig anders funktioniert als WinForms.
Wenn du die schönen, neuen Features von WPF wie DataBinding usw. nutzen willst, dann solltest du dich besser am BusyIndicator orientieren.
Christian
Weeks of programming can save you hours of planning