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, я пробовал разными способами:
-
Device.BeginInvokeOnMainThread(async () => await ExecuteNextView());
прямо из -
await Device.InvokeOnMainThreadAsync(async () => await ExecuteNextView());
прямо изCommand
-
Device.BeginInvokeOnMainThread(() => OnPropertyChanged(nameof(CurrentView));
-
await Device.InvokeOnMainThreadAsync
&BeginInvokeOnMainThread
в моемExecuteNextView
Задача / Метод.
Ничего не работает так, как в UWP.
Спасибо за ваше руководство.
Марко