0

在我的 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());直接从Command
  2. await Device.InvokeOnMainThreadAsync(async () => await ExecuteNextView());直接从Command
  3. Device.BeginInvokeOnMainThread(() => OnPropertyChanged(nameof(CurrentView));
  4. await Device.InvokeOnMainThreadAsync&BeginInvokeOnMainThread在我的ExecuteNextView任务/方法中。

没有什么能像 UWP 上那样工作(请参阅 GIF 中的工作流程): 工作流 UWP

感谢您的指导。

马可

4

0 回答 0