protected void SetupAutoSaveLoad(string settingsName) { Settings = ApplicationData.Current.RoamingSettings.CreateContainer("Settings" + settingsName, ApplicationDataCreateDisposition.Always); AutoLoad = ReactiveCommand.CreateAsyncTask(async x => { await Task.Run(() => { if (!string.IsNullOrEmpty(Settings.Values["json"] + "")) { JsonConvert.PopulateObject(Settings.Values["json"] + "", this); } return(true); }); }); AutoSave = ReactiveCommand.CreateAsyncTask(async x => { await Task.Run(() => { var str = JsonConvert.SerializeObject(this); Settings.Values["json"] = str; return(true); }); }); this.AutoPersist(x => { return(Observable.Create <Unit>((y) => AutoSave.ExecuteAsyncTask())); }); Settings.WhenAnyValue(x => x.Values).InvokeCommand(this, x => x.AutoLoad); }
public SearchViewModel() { Tracks = new ReactiveList <Track>(); Artists = new ReactiveList <Artist>(); Albums = new ReactiveList <Album>(); searchTracks = ReactiveCommand.CreateAsyncTask(ImplSearchTracks); searchTracks.Subscribe(tracks => { using (Tracks.SuppressChangeNotifications()) { Tracks.Clear(); Tracks.AddRange(tracks); } }); searchArtists = ReactiveCommand.CreateAsyncTask(ImplSearchArtists); searchArtists.Subscribe(artists => { using (Artists.SuppressChangeNotifications()) { Artists.Clear(); Artists.AddRange(artists); } }); searchAlbums = ReactiveCommand.CreateAsyncTask(ImplSearchAlbums); searchAlbums.Subscribe(albums => { using (Albums.SuppressChangeNotifications()) { Albums.Clear(); Albums.AddRange(albums); } }); var canSearch = this.WhenAnyValue(vm => vm.Query) .Select(query => !string.IsNullOrEmpty(query)); Search = ReactiveCommand.CreateAsyncTask(canSearch, async(arg) => { var tasks = new Task[] { searchTracks.ExecuteAsyncTask(), searchArtists.ExecuteAsyncTask(), searchAlbums.ExecuteAsyncTask() }; await Task.WhenAll(tasks); }); Search.Subscribe(_ => SearchCompleted()); }