Xamarin表示导航问题

时间:2015-01-12 12:48:42

标签: c# xamarin xamarin.forms

我正在开发一个Xamarin Forms应用程序,我遇到了一个问题。

导航系统似乎有些偏差。我正在使用root 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 个答案:

答案 0 :(得分:4)

关闭模态时会再次调用OnAppearing。

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

仅限于iOS

答案 1 :(得分:2)

您还可以设置变量以检查页面是否第一次加载。

protected override void OnAppearing()
{
   if (_isFirstLoad) {
   //-- create your list
   //-- _isFirstLoad = true;
   }
}