为什么用一个Dictionary 将ViewModel 缓存起来,相信利用MVVM模式开发大多数的开发者碰到的问题无疑是各个VM之间的数据通信问题,利用Dictionary缓存起来有两个好处:
1、可以解决VM之间相互通信的问题(当然你也可以用MvvmLight的 Message机制来通信,PS:个人认为完全没必要用MvvmLight中的 Messgae,如果我们框架搭的合理完全可以规避去用MvvmLight中 Message,Message比较难于管理,如果在我们的代码中出现大量的Message无疑是一件痛苦的事情,所以笔者不推荐用MvvmLight中的Message)
2、如果我们的应用程序要频繁的与服务器做交互,我们完全可以用缓存,以避免每次都去请求服务器(可以缓存一些在应用程序中一直使用的数据,规避二次请求)
public static T GetViewModel
public static T GetViewModel
例如我们的QQ聊天窗口,所有聊天窗口基本相同用到的VM类型也是相同,所以这时候就需要多个VM实例了,第一种方法就行不通了 所以会用到这种方法去构建VM,并将id作为KEY值缓存起来
第二步:构建我们的ViewModel 基类:
- public delegate void CloseEventHandle(object sender); public class CustomViewModel : ViewModelBase
- {
- public event CloseEventHandle CloseEvent; protected bool hasData;
- public CustomViewModel()
- { LoadCommand = new RelayCommand(() =>
- { if (!hasData)
- {
- ThreadPool.QueueUserWorkItem((obj) => {
- lock (this) {
- OnLoad(); hasData = true;
- } });
- } });
- }public RelayCommand LoadCommand { private set; get; }
- protected virtual void OnLoad() {
- }
- protected void OnClose(object sender)
- { if (sender != null && CloseEvent != null)
- { CloseEvent(sender);










