I am currently working on a Windows Store application (8.1) which is supposed to do the following:
- Talk to a USB HID Device (figured that out)
- Display data from that device (I want to use Oxyplot for displaying this data, got that)
- Use MVVM (I selected SimpleMVVM toolkit since it already has templates for VS2013)
- Create a mock data provider which generates random data and feeds it to my ViewModel
Now I am kinda stuck here regarding where to put the data. I use a Queue to store my values (I always want the last 100 values displayed). Now, what do I put into the model and what do I put into the ViewModel.
E.g. would I put the Queue containing the data points into my ViewModel? How would I trigger the process "Get some data every 1 second" correctly. I thought of using a System.Threading.Threads.Timer for that. Where would I put that? Into the MockDataServiceAgent? In that case: How do I access my ViewModel from the ServiceAgent to execute the update?
Everything is fine if you have buttons and stuff, but what if you have random events which are effectively triggered by "something else" than the view?
Your
Modelis yourdomain object, it represents the actualdataorinformationyou are dealing with. An example of aModelmight be that of aCarcontaining amake,model,colouretc. The main thing here is that theModelmaintainsinformationand not behaviour.The
ViewModelis yourpresentation separationlayer, it can wrap one or more of yourModelobjects. It is the glue between yourViewandModelexposing commands and methods which maintainViewstate and can alter the state of yourModelas a result ofactionson theView.Your
datashould be maintained by yourModel, orModels. It would be yourViewModelwhich would expose thatdataand provide a mechanism for yourViewto consume it. AnObservableCollectionis a common mechanism for exposing a collection ofdatato aViewas it is dynamic and provides notifications when it has items added, removed or is refreshed entirely.Ideally you do not want your objects to have strong links to one another, so to communicate between objects you might want to consider some implementation of the Mediator design pattern. Most MVVM frameworks have some implementation of this either as a
MediatororEventAggregatormessage bus. These provide apublishandsubscribemechanism where one objectpublishesa notification containing some data and one or moresubscribedobjects will receive that notification and process the data accordingly. None of the objects involved know who is apublisher,subscriberor who is involved, they only know of theMediatorimplementation.