【问题标题】:Keep Switch value when restarting the activity in Xamarin Forms在 Xamarin Forms 中重新启动活动时保持 Switch 值
【发布时间】:2021-03-14 05:25:17
【问题描述】:

我在我的应用程序中使用Switch,默认情况下,Switch 的值如果为 false,当我将此 Switch 设置为 true 然后,我离开此活动并再次输入值重启到默认值。

如何在重新启动活动时保留该值?

这是我的Switch 控件:

<Switch HorizontalOptions="Center"
        x:Name="mySwitch"
        IsToggled="{Binding ToggledState ,Mode=TwoWay}"
        Toggled="OnToggled"/>

我的代码:

  public partial class MainPage: ContentPage {
    private bool IsSwitchToggled = true;
    public ViewModel viewmodel;

    public MainPage() {
      viewmodel = new ViewModel();

      ...
    }

    protected override void OnAppearing() {
      ...
    }

    void OnToggled(object sender, ToggledEventArgs e) {
      if (IsSwitchToggled) {
        IsSwitchToggled = false;

      } else {

        viewmodel.DoSomething(e.Value);

      }

    }

  }

【问题讨论】:

  • 您是在应用程序的同一实例中重新打开菜单,还是完全重新启动应用程序?
  • 我在同一个实例中重新打开菜单
  • 将你的值存储到配置文件或 SQLite 数据库中
  • 你能给我一个小样本来了解如何在配置文件中存储值吗?我不知道该怎么做

标签: c# xaml xamarin.forms


【解决方案1】:

有多种方法可以做到这一点。 在你的情况下。在 App.xaml.cs 中声明布尔值

public partial class App : Xamarin.Forms.Application
{
   public static bool IsSwitchToggled = true;
}

然后在你的页面中访问它

App.IsSwitchToggled 

将值分配给 viewModel 和 PageLoad 中的开关

youSwitchName.IsToggled = App.IsSwitchToggled;

更新开关值时,也要更新App.IsSwitchToggled

App.IsSwitchToggled = true; // false

还有其他简单的方法可以做到这一点,例如使用 Essential 插件将其存储在首选项中。

Preference.Set(nameof(stringName),false); 
Preference.Get(nameof(stringName),false);

【讨论】:

    【解决方案2】:

    如果您想在给定的应用程序实例中保留开关的状态:声明一个全局变量。

    否则,请考虑在给定设备上存储的方法。

    【讨论】:

    • 我用我的代码使用全局变量编辑了我的帖子,但无法让它工作。
    • 您已将它放在内容页面中,只有在您引用它时才能访问。您应该将 switch bool 放在 Application 实例中,即在 App.xaml.cs 中(假设您使用了自动生成的模板),顶部有“公共部分类 App:Application”。正如 ARH 的回答一样。
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多