title: Practical management of user config data in an MVVM application
body: <p>I'm developing a desktop application that serves as an IDE for our customers. This application allows the user to configure and integrate our programmable devices into their products.</p>
  
  <p>I'm looking for best practices/design patterns for managing persistent data in an MVVM app like this. Some data is potentially reusable between the users' projects, so I'd like to store those pieces independently, rather than in one big file. This scenario has led me to consider the way Visual Studio handles this (a .csproj file that points to the files that make up the project).</p>
  
  <p>When considering the Visual Studio approach, I can easily implement an object like this for my own data and serialize it into XML. However, when it comes to opening and manipulating the files that this project file points to, I am really struggling to find an elegant solution.</p>
  
  <p>For instance, I open my project file, deserialize it, and I'm left with an object containing the paths, as well as some metadata like CompanyName, ProductName, and so on. Next step: open/deserialize each of the files pointed to in the project file... But where should those objects live? How should you notify the ViewModels that the model was changed externally? Intuition tells me that there should only be one instance of any unique model to avoid issues with copies falling out of sync, but that's all I've got.</p>
  
  <p>Perhaps there's a framework available for this?</p>
  
  <p>There is probably a good article or SO answer to this, but I couldn't figure out how to search for it. Any advice would be greatly appreciated.</p>