public override void Initialize(IViewModelHost host) { base.Initialize(host); // commands... this.RefreshCommand = new DelegateCommand(async(e) => { this.Host.HideAppBar(); await this.DoRefresh(true); // toast... string message = StringHelper.Format("Reports_Toast_IFound1Report"); if (this.Items.Count != 1) { message = StringHelper.Format("Reports_Toast_IFoundNReports", this.Items.Count); } var toast = new ToastNotificationBuilder(new string[] { StringHelper.Format("Reports_Toast_ReportsRefreshed"), message }); toast.ImageUri = "ms-appx:///Assets/Toast.jpg"; toast.Update(); }); // open the singleton report view... this.SelectionCommand = new NavigateCommand <IReportPageViewModel>(this.Host); // show the location... this.ShowLocationCommand = new DelegateCommand(async(e) => { // get the location... var result = await LocationHelper.GetCurrentLocationAsync(); if (result.Code == LocationResultCode.Ok) { await this.Host.ShowAlertAsync(string.Format("Lat: {0}, Long: {1}, Accuracy: {2}", result.Location.Coordinate.Latitude, result.Location.Coordinate.Longitude, result.Location.Coordinate.Accuracy)); } else { await this.Host.ShowAlertAsync("Failed to get location: " + result.Code.ToString()); } }); // add... this.NewCommand = new DelegateCommand((e) => this.Host.ShowView(typeof(IEditReportPageViewModel), new ReportViewItem(new ReportItem()))); }
private async Task SearchAsync(string queryText) { // flag... this.SearchDone = true; // set... this.QueryText = queryText; // set the narrative... if (string.IsNullOrEmpty(queryText)) { this.QueryNarrative = string.Empty; } else { this.QueryNarrative = string.Format("Results for '{0}'", queryText); } // load... var reports = await ReportItem.SearchCacheAsync(queryText); this.MasterItems.Clear(); foreach (var report in reports) { this.MasterItems.Add(new ReportViewItem(report)); } // what was our selected filter? var current = this.ActiveFilter; if (current != null) { var builder = new ToastNotificationBuilder(current.Description); builder.Update(); } // do we have anything? this.Filters.Clear(); if (this.MasterItems.Any()) { // all filter... var allFilter = new SearchFilter("all", this.MasterItems.Count, null, false); allFilter.SelectionCommand = new DelegateCommand(async(args) => await HandleFilterActivatedAsync(allFilter)); this.Filters.Add(allFilter); // build up a list of nouns... var nouns = new Dictionary <string, int>(); var regex = new Regex(@"\b\w+$", RegexOptions.Singleline | RegexOptions.IgnoreCase); foreach (var report in reports) { var match = regex.Match(report.Title); // word... string noun = match.Value.ToLower(); if (!(nouns.ContainsKey(noun))) { nouns[noun] = 0; } nouns[noun]++; } // add the filters... foreach (var noun in nouns.Keys) { var filter = new SearchFilter(noun, nouns[noun], noun); filter.SelectionCommand = new DelegateCommand(async(args) => await HandleFilterActivatedAsync(filter)); this.Filters.Add(filter); } // update... var manager = new ReportImageCacheManager(); foreach (var report in this.MasterItems) { await report.InitializeAsync(manager); } } // do we need to select the filter? var lastQuery = await SettingItem.GetValueAsync(LastQueryKey); if (lastQuery == queryText) { // select the filter... var lastFilterName = await SettingItem.GetValueAsync(LastFilterKey); if (!(string.IsNullOrEmpty(lastFilterName))) { ActivateFilter(lastFilterName); } } else { // update... await SettingItem.SetValueAsync(LastQueryKey, queryText); } // apply the filter... this.ApplyFilter(); }
public ReportsPageViewModel() { // setup... this.Items = new ObservableCollection <ReportViewItem>(); this.SelectedItems = new List <ReportViewItem>(); // commands... this.RefreshCommand = new DelegateCommand(async(e) => { this.Host.HideAppBar(); await this.DoRefresh(true); // toast... string message = "I found 1 report."; if (this.Items.Count != 1) { message = string.Format("I found {0} reports.", this.Items.Count); } var toast = new ToastNotificationBuilder(new string[] { "Reports refreshed.", message }); toast.ImageUri = "ms-appx:///Assets/Toast.jpg"; toast.Update(); }); // update any selection that we were given... this.SelectionCommand = new DelegateCommand((args) => { // update the selection... this.SelectedItems.Clear(); foreach (ReportViewItem item in (IEnumerable <object>)args) { this.SelectedItems.Add(item); } // raise... this.OnPropertyChanged("SelectedItems"); this.OnPropertyChanged("HasSelectedItems"); }); // dump the state... this.DumpSelectionCommand = new DelegateCommand(async(e) => { if (this.SelectedItems.Count > 0) { var builder = new StringBuilder(); foreach (var item in this.SelectedItems) { if (builder.Length > 0) { builder.Append("\r\n"); } builder.Append(item.Title); } // show... await this.Host.ShowAlertAsync(builder.ToString()); } else { await this.Host.ShowAlertAsync("(No selection)"); } }); }