如何在不重新加载 Xamarin 页面的情况下从另一个页面获取首选项值

How to get Preferences value from another page without reloading the page in Xamarin

我有

  1. Page1.xaml

    <Label x:Name="getPreferences" />
    <Button x:Name="one" Clicked="one_Clicked"/>
    
  2. Page1.xaml.cs

    public Page1()
    {
        string getpre = Preferences.Get("PreOne", "defaultpre");
        getPreferences.Text = getpre;
    }
    private async void one_Clicked(object sender, EventArgs e)
    {
       PopupNavigation.Instance.PushAsync(new Popup());
    }
    
  3. Popup.xaml(使用 Rg 弹出窗口)

    <popup:PopupPage
      ....
      <StackLayout x:Name="ss">
                     <Image Source="img"/>
                     <Label Text="Testtttt" />
                     <StackLayout.GestureRecognizers>
                         <TapGestureRecognizer Tapped="ss_Tapped" />
                     </StackLayout.GestureRecognizers>
                 </StackLayout>
    </popup:PopupPage>
    
  4. Popup.xaml.cs

    private void ss_Tapped(object sender, EventArgs e)
    {
       string setone = "01";
       Preferences.Set("PreOne", setone);
    }
    

如何在无需重新加载页面 Page1 的情况下获取 Preferences 的值以分配给标签 getPreferences。请帮忙。谢谢

尝试使用 ViewModel 和绑定,以便所有这些事情自动发生

Preferences Essential 包没有更改首选项的事件,因此每次更改时都必须获取您的值。我建议您在弹出窗口中创建自己的事件并在您的值更改时触发它

1.PopUp.xaml.cs

    public event EventHandler PreOneChanged; 
    private void ss_Tapped(object sender, EventArgs e)
    {
        string setone = "01";
        Preferences.Set("PreOne", setone);
        PreOneChanged?.Invoke(setone,EventArgs.Empty);
    }

2.Page1.xaml.cs

    public Page1()
    {
        Init();
    }

    private void Init()
    {
        string getpre = Preferences.Get("PreOne", "defaultpre");
        getPreferences.Text = getpre;
    }
    private async void one_Clicked(object sender, EventArgs e)
    {
        var popUp = new Popup();
        popUp.PreOneChanged += (ss, ee) =>
        {
            Init();
        };
        PopupNavigation.Instance.PushAsync(popUp);

    }

现在,当您在 PopUp 中更改值时,您的事件调用和页面中的值也会更改