private async Task LoadLanguages() { var lRepo = new LanguageRepository(); var langs = await lRepo.GetLanguages(); var sec = new Section(); langs.Insert(0, new Language("All Languages", null)); sec.AddAll(langs.Select(x => { var el = new StringElement(x.Name) { Accessory = UITableViewCellAccessory.None }; el.Clicked.Subscribe(_ => _languageSubject.OnNext(x)); return el; })); Root.Reset(sec); if (SelectedLanguage != null) { var el = sec.Elements.OfType<StringElement>().FirstOrDefault(x => string.Equals(x.Caption, SelectedLanguage.Name)); if (el != null) el.Accessory = UITableViewCellAccessory.Checkmark; var indexPath = el?.IndexPath; if (indexPath != null) TableView.ScrollToRow(indexPath, UITableViewScrollPosition.Middle, false); } }
public LanguagesViewModel() { Title = "Languages"; var languages = new ReactiveList<Language>(); Languages = languages.CreateDerivedCollection( x => new LanguageItemViewModel(x.Name, x.Slug), filter: x => x.Name.StartsWith(SearchKeyword ?? string.Empty, StringComparison.OrdinalIgnoreCase), signalReset: this.WhenAnyValue(x => x.SearchKeyword)); Languages .Changed.Select(_ => Unit.Default) .Merge(this.WhenAnyValue(x => x.SelectedLanguage).Select(_ => Unit.Default)) .Select(_ => SelectedLanguage) .Where(x => x != null) .Subscribe(x => { foreach (var l in Languages) l.Selected = l.Slug == x.Slug; }); this.WhenAnyValue(x => x.SelectedLanguage) .IsNotNull() .Subscribe(_ => Dismiss()); LoadCommand = ReactiveCommand.CreateAsyncTask(async t => { var languageRepository = new LanguageRepository(); var langs = await languageRepository.GetLanguages(); langs.Insert(0, LanguageRepository.DefaultLanguage); languages.Reset(langs); }); }