I'm fairly new to MVVM, so please excuse me if this problem has a well-known solution.

We are building a bunch of model classes which have some core properties that are loaded up-front, as well as some additional properties which could be lazy-loaded on demand by making a web API call (update: to clarify, it would be a web API call per lazily-loaded property).

Rather than having multiple models, it seems sensible to have a single model with the lazy-loading logic in there. However, it also seems that the lazy-loaded properties should not block when accessed, so that when the View binds to the ViewModel and it binds to the Model, we don't block the UI thread.

As such, I was thinking of a pattern something along the lines of when a lazy property on the Model is accessed it begins an asynchronous fetch and then immediately returns a default value (e.g. null). When the asynchronous fetch is complete, it will raise a PropertyChanged event so that the ViewModel/View can re-bind to the fetched value.

I've tried this out and it seems to work quite nicely, but was wondering:

  1. Are there any pitfalls to this approach that I haven't found out about yet, but will run into as the app increases in complexity?
  2. Is there an existing solution to this problem either built into the framework, or which is widely used as part of a 3rd party framework?
Edit
Report