在我的 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());
直接从Command
await Device.InvokeOnMainThreadAsync(async () => await ExecuteNextView());
直接从Command
Device.BeginInvokeOnMainThread(() => OnPropertyChanged(nameof(CurrentView));
await Device.InvokeOnMainThreadAsync
&BeginInvokeOnMainThread
在我的ExecuteNextView
任务/方法中。
没有什么能像 UWP 上那样工作(请参阅 GIF 中的工作流程):
感谢您的指导。
马可