The RemotableViewModel (RVM) library allows sharing of ViewModels accross process boundaries following the Model-View-ViewModel (MVVM) pattern. An exported ViewModel can have no, one or several importers. The exporting application itself can still bind onto the ViewModel directly. That is to say, it can be a local and remote ViewModel at the same time, depending on the point of view.
The core was initially developed by Siemens Corporate Technology in the course of a proof-of-concept for re-engineering parts of an internal forensic analysis tool at Siemens Corporate Finance, called SInvestigate. Instead of having multiple instances of long-running preprocessing clients, one single user interface should manage several console-based workers. This allows starting the preprocessing clients even via terminal, while viewing and manipulating these on demand through an administration and monitoring application.
As the library grew, we realized it has uses beyond our own original application. We decided to spend some of our spare time and to release the library under Apache 2.0 license to the public.
The RVM library is not officially maintained by Siemens. But we intend to continue using this public build within SInvestigate, where it completely satisfied our needs. We plan to use it to replace the complete preprocessing client in the near future.
The current implementation targets Windows Presentation Foundation (WPF) only, but having different or even mixed technologies for exporting and importing clients is imaginable.
Possible fields of application:
- User Interfaces for console-based executables
- User Interfaces for interaction with Windows Services (having a view outside of session-0-isolation)
- Sharing ViewModels across arbitrary applications, e.g. docking to another UI-application
- User Interfaces for (headless) network computers/devices
- Export ViewModels (e.g. from console processes or Windows services) accross process boundaries
- ViewModels derived from base class RemotableViewModel
- Classical ViewModels implementing INotifyPropertyChanged via proxy (lower performance)
- Multiple consumers possible (n-to-n, export to many and import from many)
- Nested ViewModels
- ViewModels can contain primitives (strings, integers, …), commands, collections, further ViewModels
- Discovery of ViewModels
- Configurable communication channel
- Annotations for Properties which must not be exported to external processes
- Annotations for Commands which shall be executed locally and not on the exporting ViewModel
- Further implementations, e.g. for Silverlight or even non-c#/non-.NET environments
- Join us and contribute your features!