Xamarin Forms 导航问题

3
我正在开发一个Xamarin Forms应用程序,遇到了一个问题。
导航系统似乎有点问题。我使用根NavigationPage来托管我的页面,它一直都很正常,除非...
我有一个带有项目列表的子页面。当点击每个项目时,应在单独的页面上显示有关其自身的信息(可以是模态或非模态)。
然而,这仅适用于第一次。第二次尝试检查条目时,它似乎会加载两次(字体更粗且有点模糊),当我按返回键时,一个图层留在后面,而另一个则随着关闭动画移动(这就是我认为它已经加载两次的原因)。
代码如下:
public partial class NotesPage : ContentPage {
protected override void OnAppearing()
    {
        base.OnAppearing();

        NotesList.ItemsSource = VM.Notes; // VM is my ViewModel, NotesList is a ListView defined in XAML
        NotesList.ItemSelected += async (sender, e) =>
        {
            if (e.SelectedItem == null) return;
            await Navigation.PushAsync(new NoteDetails((Note)e.Item));
            ((ListView)sender).SelectedItem = null;
        };
    }
}

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                       x:Class="Views.Notes.NoteDetails">
  <StackLayout>
    <Label Text="{Binding Title}" />
    <Label Text="{Binding Date}" />
    <Label Text="{Binding Author}" />
    <Label Text="{Binding Content}" />
  </StackLayout>
</ContentPage>

NoteDetails的类只是将BindingContext设置为传递的Note对象。 Note类有四个属性:一个String类型的Title,一个String类型的Date(其代码后端字段是DateTime对象,在getter-setter中进行转换),一个String类型的Author和一个String类型的Content。所有这些细节都被正确地显示出来。

唯一的问题是第二次检查 - 它似乎无法正常工作。 可能的问题是什么?

2个回答

4

当你关闭模态框时,OnAppearing会再次被调用。

这意味着下一次你点击ItemSelected时,代码将运行两次。

只有在iOS上才会发生。


确实OnAppearing是问题所在。将事件分配移动到构造函数中,现在它按照预期工作。 - fonix232

2
你也可以设置一个变量来检查页面是否是第一次加载。
protected override void OnAppearing()
{
   if (_isFirstLoad) {
   //-- create your list
   //-- _isFirstLoad = true;
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接