2013-06-17 9 views
8

Ich bin neu in MVVM und ich entwickle eine Anwendung. Ich habe eine Formularansicht mit viel Eigentum. Ungefähr 50. Ich kann diese in usercontrol nicht trennen, weil ich die mvvm-Prinzipien brechen würde.MVVM ViewModel viele Eigenschaften

Ich kann diese nicht in Modell trennen, weil diese Logik enthält. PropertyChange, Error change und dies wären keine poco-Klassen, und diese sind nicht das Modell.

Wäre es nett, wenn ich 60 Eigentum in einem gleichen Viewmodel behalten würde?

Denke ich, dass es falsch ist? Wie würden Sie diese organisieren?

+4

Warum können Sie kein 'UserControl' erstellen, ohne MVVM zu beschädigen? – Viv

+2

Eine gute Frage von Viv. Sie können ViewModels für Benutzersteuerelemente in Ihrem Haupt-ViewModel erstellen. Sie können auch eine Art "Controller" -Schicht für die Logik verwenden und ViewModel nur mit der PropertyChanged-Implementierung sauber halten. Der klügste Weg wäre: base viewmodel erstellen und daraus ableiten. –

+0

Ich wusste, dass ich UserController wegen http://stackoverflow.com/questions/17048066/mvvm-light-test-viewmodel-with-view-and-create-staticesource-locator – user1693057

Antwort

1

Bitte verwenden Sie nicht PropertyChanged für 60 Properties. Verwenden Sie DependencyProperty. Für Nutzungsbedingungen verwenden Sie die propdp Verknüpfung von Visual Studio und drücken Sie Tab zweimal.

entnehmen Sie bitte diesen Link: http://www.codeproject.com/Articles/62158/DependencyProperties-or-INotifyPropertyChanged

+2

Nun, da der Autor des Artikels auf einige Punkte hingewiesen hat, wenn es empfohlen wird, 'INotifyPropertyChanged' zu implementieren (z. B. Testen), sollten Sie nicht 'DependencyProperty' empfehlen, ohne einen Hinweis darauf zu geben, dass es einige Einschränkungen gibt. – DHN

+0

Nun, da ich den Link zu diesem Artikel gepostet, könnte der Autor dieser Frage sorgfältig durchlesen :) Aber natürlich haben Sie Recht, es wäre besser, ihn in Betracht ziehen zu lassen, anstatt nur zu empfehlen, 'DependencyProperty' zu verwenden –

+0

I ' Entschuldigung, ich stimme nicht zu. * Bitte verwenden Sie PropertyChanged nicht für 60 Eigenschaften.Verwenden Sie DependencyProperty. [...] * bedeutet, dass es keine Nachteile gibt. Ich kenne mich und ich kenne andere Entwickler ... wir hassen Textwände, damit er die Nachteile übersehen kann. – DHN

2

Ich kann nicht diese in Usercontrol trennen, weil ich die mvvm Prinzipien brechen.

Ich bin mir nicht sicher, was Sie damit meinen. Im Wesentlichen möchten Sie die Ansichtszusammensetzung verwenden und das Ansichtsmodell und die Ansichten in konstante Teile zerlegen.

Eine Ansicht ist ein WPF UserControl (oder Window), also, wenn Sie mit MVVM dann bist du UserControl ‚s verwendet wird, ist es nur konzeptionell sind sie als Ansichten in dem Muster betrachtet.

Ich würde auch empfehlen, dass Sie use an MVVM framework if you're using the MVVM pattern, und so etwas wie Caliburn.Micro sieht Zusammensetzung unglaublich einfach.

Ich würde auch nicht empfehlen, Abhängigkeitseigenschaften für Ansichtsmodelle, use INotifyPropertyChanged instead.

Die meisten MVVM-Frameworks stellen einen Basisansichtsmodelltyp bereit, der eine lambda-basierte Methode zum Aufrufen des PropertyChanged-Ereignisses enthält und somit das Refactoring unterstützt.

+0

Ich bin neu, aber ich lese ich kann usercontrol nur mit Abhängigkeitseigenschaften verwenden, weil die gesamte Eigenschaft im Ansichtsmodell sein sollte und das usercontrol es durch die Abhängigkeitseigenschaft anzeigt usercontrol, die dep-Eigenschaften bleiben immer noch im View-Modell, nur werden mehr Zeilen vorhanden sein – user1693057

+0

Ihre Ansichten sind UserControls, die deklarativ XAML sind und Steuerelemente wie einen TextBlock instanziieren, der Abhängigkeitseigenschaften wie die Eigenschaft Text haben wird Die Bindung muss eine Abhängigkeitseigenschaft sein, aber nicht die Quelle.Daher implementiert Ihr Ansichtsmodell INPC, und die Bindung funktioniert weiterhin als Die TextBlock-Zieleigenschaft ist eine Abhängigkeitseigenschaft. – devdigital

+0

ok, aber in diesem Fall werden die Eigenschaften im Master View Model nicht getrennt. Kann ich ein View-Modell ohne View erstellen und im Master View Model verwenden? – user1693057