Laden...

MVVM - RelayCommand

Erstellt von reloop vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.356 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren
MVVM - RelayCommand

Hallo,

ich habe mein MVVM wiefolgt aufgebaut:

0- Backend
1- Contract
2- Implementation
3- ViewModels
4- Anwendung(User-Controls die Zugriff auf das jeweilige VM besitzen).

Derzeit verwende ich keine RelayCommand um zwischen Anwendung und ViewModel zu kommunizieren, sondern schreibe z.B. in einem:

<Button Click="ClickEvent"/> anstatt <Button Command="{Binding ClickEvent}"/>

Nun wurde ich auf das Verfahren mit den RelayCommand-Aufmerksam gemacht und überdenke gerade ob meine "FrameWork"-Logik noch bestand hat, nach meiner "alten"(?) vorgehensweise.

Wie handhabt ihr das? Wäre dass Grund genug das System nochmal zu überdenken?

Danke für euren Rat,
gruss,
reloop

5.742 Beiträge seit 2007
vor 13 Jahren

Wie handhabt ihr das? Wäre dass Grund genug das System nochmal zu überdenken?

Der Idee mit den Command nach würdest du ja einfach statt:

<Button Click="MyEventHandler" />

private void MyEventHandler(object sender, EventArgs e)
{
   ((MyViewModel) this.DataContext).DoSomething();
}

folgendes schreiben:


public sealed class MyViewModel
{
  public ICommand MyCommand { get; set; }
  //...
  public MyViewModel()
  {
      this.Command = new RelayCommand(this.DoSomething);
  }
  public void DoSomething() { /*...*/ }
}

und dann entsprechend

<Button Command="{Binding Path=MyCommand}" />

Also an sich keine wirklich konzeptionelle Änderung.
IMHO stellt es also kein Problem dar, das einfach ab sofort anders zu machen und den bestehenden Code nach und nach umzustellen.

Insofern kann m.E. nicht wirklich von einer Infragestellung der "FrameWork-Logik" (was auch immer du damit genau meinst?) die Rede sein.
Hauptsächlich ist das eher etwas Kosmetisches.

Oder zielt deine Frage auf was anderes ab?

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Danke für deine Antwort, das kommt mir schonmal sehr Entgegen.

Die Frage, die sich mir gestellt hat, war ob es irgendwelche Vorteile durch den Einsatz von RelayCommand geben wird. (Perfomance, Übersichtlichkeit, einfachere Codeverwaltung? etc.)

Oder ob es im Prinzip irrelevant ist, welchen Weg ich da gehe.

Gruss und danke für deine Hilfe,
reloop

EDIT:

Nachtrag: Und noch eine Frage zum Schluss - Wie löst ihr das in euren Anwendungen?

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

ein anderer Vorteil des ICommand ist dass mittels CanExecute zB Buttons disabled werden falls ein Aktion nicht zur Verfügung steht.

Wie löst ihr das in euren Anwendungen?

Guck dir mal THE MODEL-VIEW-VIEWMODEL (MVVM) DESIGN PATTERN FOR WPF an. Das ist mMn ein sehr gutes Demo.

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!"

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Danke gfoidl,

eine Frage zum Schluss hätte ich noch:

Worin unterscheide ich denn die Events? Bei einem Click definiere ich ja fest dass es beim "Click" feuern soll, doch beim Command kann ich ja nur ein Event hinterlegen?

Was wäre denn z.B. wenn ich jetzt eine anderes Event noch belegen wollen würde?

Danke für eure Hilfe,

gruss,

reloop

5.742 Beiträge seit 2007
vor 13 Jahren

irgendwelche Vorteile durch den Einsatz von RelayCommand geben wird. (Perfomance, Übersichtlichkeit, einfachere Codeverwaltung? etc.)

Ja - Übersichtlichkeit bzw. sauberer Code.

Wie löst ihr das in euren Anwendungen?

Ich verwende - wo möglich - Commands.

Was wäre denn z.B. wenn ich jetzt eine anderes Event noch belegen wollen würde?

Google mal nach (in beliebigen Zusammenstellungen 😉 ): "WPF Command Attached Behavior". Da gibt's einige nette Varianten.

Einen ganz interessanten Eindruck machen auch die Actions in Caliburn. Wobei mir da auch ein paar Punkte nicht ganz so gut gefallen.

reloop Themenstarter:in
139 Beiträge seit 2010
vor 13 Jahren

Google mal nach (in beliebigen Zusammenstellungen Augenzwinkern ): "WPF Command Attached Behavior". Da gibt's einige nette Varianten.

Einen ganz interessanten Eindruck machen auch die
>
. Wobei mir da auch ein paar Punkte nicht ganz so gut gefallen.

Danke für deinen Rat, ich denke da werde ich fündig werden.

Wenn du schreibst, dass dir da ein paar Punkte nicht ganz so gut gefallen, darf ich Fragen, wie du es z.B. löst wenn du bei einem Button das GotFocus event noch belegen möchtest?

Die Command-Property kümmert sich ja scheinbar um das Click-Ereignis.

Gruss,
reloop

5.742 Beiträge seit 2007
vor 13 Jahren

Wenn du schreibst, dass dir da ein paar Punkte nicht ganz so gut gefallen, darf ich Fragen, wie du es z.B. löst wenn du bei einem Button das GotFocus event noch belegen möchtest?

Hmm - das waren zwei verschiedene Dinge.

Das mit dem nicht so gut gefallen bezog sich auf Caliburn.
Und andere als die Standardevents brauche ich eigentlich fast nie.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Meist sagt den Leuten Caliburn nicht zu, weil es so Umfangreich ist.

Für 95% der Anwendungen reicht Caliburn.Micro.