【问题标题】:Xamarin Forms navigation issueXamarin 表单导航问题
【发布时间】:2015-01-12 12:48:42
【问题描述】:

我正在开发 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(它的 code-back 字段是一个 DateTime 对象,转换发生在 getter-setter 中)、一个 String Author 和一个 String Content。所有详细信息都正确显示。

唯一的问题是第二次检查 - 它只是拒绝正常工作。 可能是什么问题?

【问题讨论】:

    标签: c# xamarin xamarin.forms


    【解决方案1】:

    当您关闭一个模态框时,会再次调用 OnAppearing。

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

    但仅限于iOS

    【讨论】:

    • 确实出现了问题。将事件分配移至构造函数,现在它按预期工作。
    【解决方案2】:

    你也可以设置一个变量来检查页面是否是第一次加载。

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

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 2016-11-26
      • 2018-02-07
      • 1970-01-01
      • 2021-02-24
      • 2018-11-30
      相关资源
      最近更新 更多