public QuizPage(URLHttpParams httpParams) { InitializeComponent(); viewModel = new QuizViewModel(httpParams); this.BindingContext = viewModel; MessagingCenter.Subscribe <QuizViewModel>(this, "QuizesLoaded", (sender) => { if (sender.Quizes == null || sender.Quizes.Count < 1) { return; } count = sender.Quizes.Count; possition = 1; }); }
public QuizViewModel(URLHttpParams httpParams) { PageType = ItemType.QuizAnswer; Answers = new ObservableCollection <QuizAnswerViewModel>(); LoadPageCommand = new Command(async() => await ExcuteLoadPageCommand(httpParams)); MessagingCenter.Subscribe <ItemsViewModel>(this, "ItemsLoaded", (sender) => { Item i = Items.Where(x => ((QuizAnswer)x).IsRight == 0).First(); foreach (var item in Items) { var quizAnswer = new QuizAnswerViewModel(item as QuizAnswer); Answers.Add(quizAnswer); } RightAnswer = i.Id; }); }
public ItemsViewModel(URLHttpParams httpParams = null) { Title = "Mani kursi"; Items = new ObservableCollection <Item>(); LoadItemsCommand = new Command(async(args) => { httpParams = (URLHttpParams)args ?? httpParams; await ExecuteLoadItemsCommand(httpParams); }); MessagingCenter.Subscribe <NewItemPage, Item>(this, "AddItem", async(obj, item) => { var newItem = item as Item; Items.Add(newItem); await DataStore.AddItemAsync(newItem); }); }
private async Task DoGetRequest(object obj) { URLHttpParams httpParams = (URLHttpParams)obj; string url = httpParams.URL; try { HttpClient client = new HttpClient(); client.BaseAddress = new Uri(url); var response = await client.GetAsync(client.BaseAddress); response.EnsureSuccessStatusCode(); // выброс исключения, если произошла ошибка // десериализация ответа в формате json var content = await response.Content.ReadAsStringAsync(); JObject o = JObject.Parse(content); MethodInfo method = typeof(JsonConvert).GetMethods() .Where(m => m.Name == "DeserializeObject") .Select(m => new { Method = m, Params = m.GetParameters(), Args = m.GetGenericArguments() }) .Where(x => x.Params.Length == 1 && x.Args.Length == 1) .Select(x => x.Method) .First(); Type t = Type.GetType("BachelorThesis.Models." + httpParams.Type); t = typeof(ItemRecords <>).MakeGenericType(t); MethodInfo generic = method.MakeGenericMethod(t); var test = generic.Invoke(null, new[] { o.ToString() }); FieldInfo property = test.GetType().GetFields().First(); IEnumerable result = (IEnumerable)property.GetValue(test); items = result.Cast <Item>().ToList(); //var itemRecords = JsonConvert.DeserializeObject<ItemRecords<Item>>(o.ToString()); //items = itemRecords.records; } catch (Exception ex) { Debug.WriteLine(ex); } }
public ItemsPage(URLHttpParams httpParams, ItemType pageType) { InitializeComponent(); viewModel = new ItemsViewModel(httpParams) { PageType = pageType, Navigation = this.Navigation }; BindingContext = viewModel; if (pageType == ItemType.Content) { stackLayout.Children.RemoveAt(0); quizButton.IsVisible = true; gridView.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) }); Grid.SetColumnSpan(stackLayout, 3); gridView.Children.Add(quizButton, 2, 1); WebView webView = new WebView(); webView.HorizontalOptions = LayoutOptions.FillAndExpand; webView.VerticalOptions = LayoutOptions.FillAndExpand; var source = new HtmlWebViewSource(); source.SetBinding(HtmlWebViewSource.HtmlProperty, "Text"); webView.Source = source; stackLayout.Children.Add(webView); MessagingCenter.Subscribe <ItemsViewModel, object>(this, "ContentLoaded", (seder, obj) => { Content info = ((IEnumerable)obj).Cast <Content>().First(); if (info.Count > 0) { quizButton.IsEnabled = true; } }); } }
protected override void OnAppearing() { base.OnAppearing(); if (IsNewPage) { viewModel.LoadPageCommand.Execute(null); } else { if (viewModel.Quizes.Count == 0) { return; } Item currentQuiz = viewModel.Quizes.Dequeue(); viewModel.Question = currentQuiz.Name; URLHttpParams httpParams = new URLHttpParams(viewModel.PageType, currentQuiz.Id.ToString()); viewModel.LoadItemsCommand.Execute(httpParams); } }
async Task ExcuteLoadPageCommand(object obj) { if (IsBusy) { return; } IsBusy = true; try { Items.Clear(); var quizes = await DataStore.GetItemsAsync(true, obj); if (quizes == null) { return; } Quizes = new Queue <Item>(quizes); MessagingCenter.Send <QuizViewModel>(this, "QuizesLoaded"); } catch (Exception ex) { Debug.WriteLine(ex); } finally { IsBusy = false; } Item currentQuiz = Quizes.Dequeue(); Question = currentQuiz.Name; URLHttpParams httpParams = new URLHttpParams(PageType, currentQuiz.Id.ToString()); await ExecuteLoadItemsCommand(httpParams); }
async void OnItemSelected(object sender, SelectedItemChangedEventArgs args) { var item = args.SelectedItem as Item; if (item == null) { return; } ItemType nextPageType; URLHttpParams httpParams; string title; switch (viewModel.PageType) { case ItemType.Course: nextPageType = ItemType.Lesson; title = "Nodarbības"; break; case ItemType.Lesson: nextPageType = ItemType.Content; title = item.Name; break; default: nextPageType = ItemType.Course; title = "Mani Kursi"; break; } httpParams = new URLHttpParams(nextPageType, item.Id.ToString()); await Navigation.PushAsync(new ItemsPage(httpParams, nextPageType) { Title = title }); // Manually deselect item. ItemsListView.SelectedItem = null; }
async void OnQuizButtonClicked(object sender, System.EventArgs e) { string id = viewModel.Items.First().Id.ToString(); URLHttpParams httpParams = new URLHttpParams(ItemType.Quiz, id); await Navigation.PushModalAsync(new QuizPage(httpParams)); }