首页 > 解决方案 > 如何从并使用 Xamarin 从一页到另一页显示此文本?

问题描述

我有两页:

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();
        }
    }
}

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

标签: c#xamarin

解决方案


即使应用程序在没有数据库的情况下关闭,存储数据的一种简单方法是将“_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());
    }
}

获取 key cityNamein的值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并将城市名称存储在数据模型中。


推荐阅读