Laden...

WPF Fenster aktualisieren

Erstellt von AnitaMerz vor 9 Jahren Letzter Beitrag vor 9 Jahren 5.675 Views
A
AnitaMerz Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren
WPF Fenster aktualisieren

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

P
660 Beiträge seit 2008
vor 9 Jahren

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"

211 Beiträge seit 2008
vor 9 Jahren

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

2.207 Beiträge seit 2011
vor 9 Jahren

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

211 Beiträge seit 2008
vor 9 Jahren

@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

A
AnitaMerz Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

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

5.658 Beiträge seit 2006
vor 9 Jahren

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

A
AnitaMerz Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

Hi MrSparkle,

da hab ich mich selbst ausgebremst - danke für den Hinweis, werd mir das sofort mal anschauen.

Anita

P
660 Beiträge seit 2008
vor 9 Jahren

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"

A
AnitaMerz Themenstarter:in
4 Beiträge seit 2014
vor 9 Jahren

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

5.658 Beiträge seit 2006
vor 9 Jahren

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