如何使用 Xamarin 从 <Entry/> 传输文本并将此文本从一个页面显示到另一个页面?

问题描述

我有两页:

WeatherPage.xaml
Favorites.xaml

我在 WeatherPage.xaml 页还有一个“收藏夹”按钮。

我希望当用户WeatherPage.xaml 字段中的 <Entry/> 中写入内容并且在按下“收藏夹”按钮后,此文本应显示在另一个页面 Favorites.xaml 上。

是否可以选择将传输的文本保留在页面 Favorites.xaml 上,即使在应用程序关闭时也保留在那里?

我没有数据库,我正在寻找一个示例,说明如何将文本从一个页面移动到另一个页面并保存。

我在 WeatherPage.xaml 中的代码是:

<Entry x:Name="_cityEntry"
                   Grid.Row="1" 
                   Grid.Column="1"
                   Margin="5,0"
                   VerticalOptions="Center"
                   BackgroundColor="Black"
                   TextColor="White"
                   Opacity="0.7"
                   Text="Moscow" />

            <ImageButton Source="blackheart.png"
                    Grid.Row="1" 
                    Grid.Column="3"
                    WidthRequest="40"
                    HeightRequest="40"
                    Opacity="0.7"
                    Clicked="OnGetFavorites"/>

在我的 WeatherPage.xaml.cs 中,我在按钮方法上插入这行代码

void OnGetFavorites(System.Object sender,System.EventArgs e)
    {
        Preferences.Set("cityName",_cityEntry.Text);
    }

我的 FavoritePage.xaml.cs 看起来像:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;

namespace WeatherLocationInfo.Views
{
    public partial class Favorites : ContentPage
    {
        public Favorites()
        {
            InitializeComponent();
            NavigationPage.SetHasNavigationBar(this,false);

            FavoriteCities();
        }

        private void FavoriteCities()
        {
            string cityName = Preferences.Get("cityName","default_value");

            FavoriteCity.Text = cityName.ToString();
        }
    }
}

应用程序在页面启动时,第一个输入的城市从WeatherPage页打印到Favorites页,但是当它改变城市并再次点击按钮时,搜索栏的内容不是更新了。

解决方法

即使在没有数据库的情况下关闭应用程序时也可以简单地存储数据的方法是将“_cityEntry 文本”存储为应用程序首选项。您可以直接使用 Xamarin.Essentials: Preferences

WeatherPage.xaml.cs 中创建一个新的偏好键值对

public partial class WeatherPage : ContentPage
{
    public WeatherPage()
    {
        InitializeComponent();
    }

    private void OnGetFavorites(object sender,EventArgs e)
    {
        Preferences.Set("cityName",_cityEntry.Text);
        Navigation.PushAsync(new FavoritePage());
    }
}

获取cityName中键Favorites.xaml.cs的值

public partial class FavoritePage : ContentPage
{
    public FavoritePage()
    {
        InitializeComponent();
        NavigationPage.SetHasNavigationBar(this,false);

        FavoriteCities();
    }
    private void FavoriteCities()
    {
        string cityName = Preferences.Get("cityName","default_value");
        FavoriteCity.Text = cityName.ToString();
    }
}

此外,如果您想将数据传递到已创建的页面,您可以使用 MVVM 并将城市名称存储在数据模型中。