public SteamPaverViewModel() { _refreshCommand = AsyncRelayCommand.Lazy(() => Refresh(), null, true); GameDatas = new ObservableCollectionEx <GameData>(); var cachedGameDatas = CacheManager.LoadFromCache <GameData>() .OrderBy(o => o.Installed ? 0 : 1) .ThenBy(o => o.Name); //var cachedGameDatas = new GameData[] { CacheManager.LoadFromCache<GameData>($"GameData_{219740}") }; foreach (var cachedGameData in cachedGameDatas) { GameDatas.Add(cachedGameData); } GameDatas.CollectionChanged += (o, e) => { switch (e.Action) { case NotifyCollectionChangedAction.Add: foreach (GameData item in e.NewItems) { item.SaveToCache(); } break; case NotifyCollectionChangedAction.Remove: foreach (GameData item in e.OldItems) { item.RemoveFromCache(); } break; default: break; } }; UserData = CacheManager.LoadFromCache <UserData>().FirstOrDefault(); if (UserData == null) { UserData = new UserData(); UserData.SaveToCache(); } UserData.PropertyChanged += (o, e) => { UserData.SaveToCache(); }; App.Current.Exit += (o, e) => { UserData.SaveToCache(); if (SelectedGameData != null) { SelectedGameData.SaveToCache(); } }; }