OnPropertyChange вызывает тупик на Xamarin.Forms Android

в моем приложении Xamarin.Forms у меня есть ObservableCollection для представления различных представлений в ContentPresenter. Это своего рода интервью, когда пользователь открывает новое представление с новыми элементами управления, нажимая кнопку, чтобы ответить на некоторые вопросы.

Это моя коллекция:

private ObservableCollection<View> AbfrageContentViews { get; set; }

и public View CurrentView {get; set; } поле для хранения текущего представления (сетка).

В XAML есть <ContentView Content="{Binding CurrentView}/>

Во-первых: в моем решении UWP все работает нормально! Когда дело касается Android, возникает следующая ситуация:

Моя ViewModel помещает много сеток в коллекцию, и когда пользователи нажимают кнопку «Далее», выполняется следующий код:

      private async Task ExecuteNextView()
         {
                if (AbfrageContentViews == null || AbfrageContentViews.Count() < 1) return;
                var currentListPosition = AbfrageContentViews.IndexOf(CurrentView);

                currentListPosition++;
                if (currentListPosition < AbfrageContentViews.Count())
                {
                    
                    var griditem = (Grid)CurrentView;
                                        
                    var oldView = griditem;

                    var newView = (Grid)AbfrageContentViews[currentListPosition];
                    newView.Opacity = 0;
                    
                    await oldView.FadeTo(0, 190, Easing.SpringOut);
                    
                    CurrentView = AbfrageContentViews[currentListPosition];´

                    OnPropertyChanged(nameof(CurrentView));

                    await newView.FadeTo(1, 190, Easing.SpringIn);

                    OnPropertyChanged(nameof(Progress));

                }
}

На OnPropertyChanged(nameof(CurrentView));экран зависает. Мои точки останова во время отладки также продолжаются.

Что я сделал: чтобы вызвать задачу в MainThread, я пробовал разными способами:

  1. Device.BeginInvokeOnMainThread(async () => await ExecuteNextView()); прямо из
  2. await Device.InvokeOnMainThreadAsync(async () => await ExecuteNextView()); прямо из Command
  3. Device.BeginInvokeOnMainThread(() => OnPropertyChanged(nameof(CurrentView));
  4. await Device.InvokeOnMainThreadAsync & BeginInvokeOnMainThread в моем ExecuteNextView Задача / Метод.

Ничего не работает так, как в UWP.

Спасибо за ваше руководство.

Марко

0 ответов

Другие вопросы по тегам