xsharp.eu • MVVM: how to open a lookup window - Page 2
Page 2 of 4

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 6:36 am
by wriedmann
Hi Phil,

thank you very much for taking the time to build your samples.

MVVM or MVMV how do you call it seems to me to be the right structure for clean data applications. Where I have my doubts is how to interconnect the windows together. In VO, I have my Shell and its children, sometimes also modal selection dialogs.

In X#, my Shell will be replaced by another structure: the child windows will be replaced by tab pages:
mvvmapp.png
mvvmapp.png (10.02 KiB) Viewed 436 times
What is already working is the load of single modules at runtime - I plan to have an empty shell and load the functionality based on settings.

I hope to finish this structure as early as possible and publish it for everyone that needs such a structure and is not happy with large and complex kits like Prism and prefers a smaller solution that is understandable.

Wolfgang

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 9:14 am
by NickFriend
Hi Wolfgang,

I'm going to be a bit busy today, so this evening I'll sit down and post a response with a bit more detail.

But in short, the idea is that all the opening/closing of View/ViewModels is managed by the central message processor. This is the first thing you start up in app.xaml.cs, it starts the shell window, and is responsible for opening/closing windows (or usercontrols or whatever, each one representing a View/ViewModel pair).

Moving data (such as the selected customer id from your lookup) and other notifications, can be direct from one VM to another, but again by messaging, not by direct reference. The trick is that each VM must have a unique identifier (a Guid) so that the correct target for data can be found.

1. VM sends a message saying "I want to select a customer, and here's my VM Id XXX".
2. Central processor gets the message, opens a View/ViewModel of your lookup classes.
3. User selects a customer, lookup VM sends a message saying "customer selected, VM Id XXX asked for it".
4. Original VM is looking out for messages with it's Id, gets the message and extracts the data.

I'll explain better later on, but this sort of scheme leaves a totally decoupled system. You can update your lookup implementation without worrying about VMs that call it for example.

Nick

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 9:18 am
by wriedmann
Hi Nick,

thank you very much! With this answer I'll be able to go further, I hope.

Wolfgang

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 11:48 am
by Phil Hepburn
Hi Wolfgang,

I see that Nick will help you with the 'inversion of control' so you can de-couple each and every View (and supporting ViewModel), from the others. This is great and the modern way to do things - Nick has been doing it successfully for years.

However, please remember that any business related data ought to be help in 'Model' classes and not in the VM properties. And remember that the Model object(s) can still be scoped such that they are available to be used as input objects when VMs are instantiated by the Controller system.  

Nick got me (and others) to keep the VM code as clean and as simple as possible, just enough to service the View. And it works, works well, and I like it that way ;-0)

If there is one reason I need to criticise myself (and I am sure there are many!) is for NOT making more of the data 'Model' object as a data provider to support my VM to support my Views. I am working on improving this side of my application design and coding.

All the BEST,
Phil.
Oh! - and Good Luck too.

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 12:45 pm
by Phil Hepburn
Hi Wolfgang,

Although I encourage you to follow Nick's advice on inversion of control and how Views are opened, you said you had little time, and had to deliver something to your customer.

I suggest that moving over to this new design structure may not be a good idea if you are 'up against it' time-wise ;-0) Take CARE !!!

If it is done correctly, then the new control system should affect all of your code, and that means each and every View/VM.

Ask Nick if he thinks it is possible for you to make these changes and also deliver - without losing your Christmas break ;-0)

Good Luck,
Phil.

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 2:24 pm
by wriedmann
Hi Phil,

I don't think I'll save any time doing things wrongly unfortunately (or fortunately - it depends on the view....)

Therefore I have not the time to try things, but I need the time to do the correct things.

Thank you very much for your wishes!

Wolfgang

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 2:32 pm
by Frank Maraite
Hi Wolfgang,

look into the session material I provided in cologne.
You should find a sample on how to transform an application from old to new way. And it is a XIDE sample.

Frank

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 2:41 pm
by wriedmann
Hi Frank,

I'll look a it.

Thank you!

Wolfgang

MVVM: how to open a lookup window

Posted: Mon Dec 19, 2016 5:15 pm
by NickFriend
Hi Wolfgang,

Ok, things have quietened down a bit now.... were you able to make any useful sense of what I wrote hurriedly this morning, or can I clarify anything in particular now?

Nick

MVVM: how to open a lookup window

Posted: Tue Dec 20, 2016 6:25 am
by wriedmann
Hi Nick,

your message was clear to me.... Only a small question: how do you open a window from a ViewModel? The ViewModel of a View normally is assigned in the constructor of the view.

Wolfgang

P.S. I have no codebehind as I have no XAML - my windows are all built by code using enhanced classes.