Hallo zusammen.
Zu Beginn meines Programms macht ein Service folgendes:
Nun habe ich zwei Stellen, bei denen das
##########
Ich hatte zwar den Microsoft-Artikel von @loeffel gesehen, wie man WinForms und MVVM zusammenbringt, aber mein Problem 1 führt darin (soweit ich gesehen habe) zur gleichen Umsetzung wie gehabt: BindingSource mit
##########
Mir ist eingefallen, dass ich im Startmodul neben
##########
Vielleicht bin ich aber auch gedanklich grad zu radikal. Schließlich muss man ja auch in der WPF beim DesignTime-DataContext den ViewModel-DataType angeben. Damit wäre ggf. Problem 1 hinfällig und Problem 2 umgangen. Aber ich lass es mal noch ein paar Tage unerledigt, falls sich noch jemand mit Anmerkungen äußert.
Zu Beginn meines Programms macht ein Service folgendes:
- sich die von der Startroutine erzeugte MainForm-Instanz merken (
UcMain
, gespeichert in einer Variable vom allgemeinen TypControl
; es ist ein UserControl, welches in ein generisches Form gepackt wird.) - sich die von der Startroutine erzeugte MainViewModel-Instanz merken (
VmMain
, gespeichert in einerObject
-Variable) VmMain
alsDataContext
desUcMain
setzenUcMain
als Dialog anzeigen
VmMain
ist eine Ansammlung von DatenViewModels als ObservableCollection(Of Object)
, damit mein DataListPanel (DLP) (ein DGV-ähnliches, eigenes Control in einer DLL) auf die Items zugreifen kann, ohne wissen zu müssen, was es konkret für Items hostet.Nun habe ich zwei Stellen, bei denen das
UcMain
das VmMain
kennt, was ja nicht bei MVVM sein soll:- Eine BindingSource bekommt im Designer als DataSource
GetType(VmMain)
, damit ich RelayCommands desVmMain
an Buttons oder ToolStripButtons desUcMain
binden kann. Diese Abhängigkeit kann ich - naja, umgehen, indem ich imUcMain
-Konstruktor einen Typen übergebe, den ich im Startmodul mit angebe, also:UcMain.Designer.vb
diesen Typ beiBsViewModel.DataSource
angeben undGetType(VmMain)
weglassen. Nachteil: Ich habe keine DesignTime-Unterstützung mehr für die RelayCommands. - Das DLP braucht die untypisierte
VmMain
-PropertyItemViewModels
mit den zu hostenden Items/Data-ViewModels. Derzeit leider nur umsetzbar mitDataListPanel.DataContext = DirectCast(DataContext, VmMain).ItemViewModels
. Da habe ich noch keinen Weg gefunden, das zu ersetzen, da der Service ja auch nicht so viel vom ViewModel kennen soll, damit er auch für andere Forms einsetzbar bleibt.
##########
Ich hatte zwar den Microsoft-Artikel von @loeffel gesehen, wie man WinForms und MVVM zusammenbringt, aber mein Problem 1 führt darin (soweit ich gesehen habe) zur gleichen Umsetzung wie gehabt: BindingSource mit
DataSource = GetType(ViewModel)
, was ja wieder das Form an die Bekanntheit des ViewModels bindet.##########
Mir ist eingefallen, dass ich im Startmodul neben
UcMain
- und VmMain
-Instanz-Erstellung auch die ItemsViewModels
untypisiert dem UcMain
schon mitgeben kann. Aber ob das sauber ist?##########
Vielleicht bin ich aber auch gedanklich grad zu radikal. Schließlich muss man ja auch in der WPF beim DesignTime-DataContext den ViewModel-DataType angeben. Damit wäre ggf. Problem 1 hinfällig und Problem 2 umgangen. Aber ich lass es mal noch ein paar Tage unerledigt, falls sich noch jemand mit Anmerkungen äußert.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()