예제 #1
0
 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);
 }
예제 #2
0
        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());
        }