Everybody wants their project to have a great architecture with independent data and logic, that would be easy to scale, support and modify. Our tools make it possible to bring MVVM pattern to life for development in Unity3D with UI system of your choice – either NGUI, iGUI, or EZGUI

Automatic data binding, following the popular MVVM pattern, makes it possible to significantly boost productivity, quality and development speed, no matter what UI library you are using. It allows you to keep a game logic code unmodified (literally) not only when changing user interface but also when changing UI library.
NData – is an automatic data binding framework for NGUI based User Interfaces.
iData - is the same system for User Interfaces created with iGUI. Contains additional bindings for rich iGUI controls collection.
EZData - is the similar framework for EZGUI based UI, that, in addition to data binding, it includes EZGUI specific resolution independent interface layout and elements parenting.
Overview
MVVM (Model-View-ViewModel) pattern is one of the popular ways of separating UI from application logic. When powered by reflection based data bindings it allows writing an extremely clean code in both View, which is in case EZGUI or NGUI controls hierarchy, and ViewModel which is basically an hierarchy of simple objects containing simple properties (like Boolean, int, string and Texture2D values) and collections of other simple objects. Simplicity of this objects means that they ideally don’t have any logic and serve only like an hierarchical representation of user interface state. To enable interaction of user interface with application/game logic, objects in ViewModel can contain methods called commands, which are as simple as can be imagined – void returning public methods without parameters. They don’t have to be bound explicitly to UI controls like it used to be with regular events handlers. But rather this commands are invoked through command bindings. When command is invoked in order to perform some actions in Model (loading next game level, submitting score to the server, etc.), ViewModel invokes Model methods. If Model requires some data from UI as an arguments (like player name for score submission), this data is just taken from ViewModel, because it’s already there thanks to the automatic data synchronization with two-way data bindings. When the action is finished, Model makes changes in ViewModel by changing appropriate properties. This changes made in a single property get automatically notified to all UI elements that rely on this property value.