选取器不显示先前的选择

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选取器不显示先前的选择相关的知识,希望对你有一定的参考价值。

我正在关注Xamarin Forms的Bindable Picker上的this教程。我在教程中一直都是这样做的,但是一旦我离开并回到我的设置页面,我就无法显示上一个选择。

Settings.cs

public static double DistancePreferences 
{
    get { return AppSettings.GetValueOrDefault(nameof(DistancePreferences), 32.2); }
    set { AppSettings.AddOrUpdateValue(nameof(DistancePreferences), value); }
}

DistanceItem类

public class DistanceItem
{
    public string Display { get; set; }
    public double Kilometers { get; set; }

    public static List<DistanceItem> All
    {
        get 
        {
            return new List<DistanceItem>
            {
                new DistanceItem { Display="1 mile", Kilometers=1.6 },
                new DistanceItem { Display="2 miles", Kilometers=3.2 },
                new DistanceItem { Display="5 miles", Kilometers=8.0 },
                new DistanceItem { Display="10 miles", Kilometers=16.1 },
                new DistanceItem { Display="20 miles", Kilometers=32.2 },
                new DistanceItem { Display="50 miles", Kilometers=80.5 },
                new DistanceItem { Display="100 miles", Kilometers=160.9 }
            };
        }
    }
}

来自SettingsPage.xaml的选择器

<Picker x:Name="disPicker" ItemsSource="{x:Static distance:DistanceItem.All}" ItemDisplayBinding="{Binding Display}" SelectedItem="{Binding DistanceSelection, Mode=TwoWay}"/>

SettingsViewModel.xaml

public DistanceItem DistanceSelection 
{ 
    get 
    {
        var distance = Settings.DistancePreferences;
        var item = DistanceItem.All.Find(x => x.Kilometers.Equals(Settings.DistancePreferences));
        return item;
    } 
    set 
    {
        // Saving the km from the selection for later 
        Settings.DistancePreferences = value.Kilometers;
    }
}

这是我的ios sim上的选择器。 enter image description here

当我离开我的应用程序中的另一个页面,并返回到“设置”页面时,这就是我所看到的。 enter image description here

答案

您的代码与教程中的代码之间的一个重要区别是,教程中的代码为All创建了一个集合,并在每次调用getter时返回。每次调用getter时,您的代码都会创建一个新集合。

将DistanceItem.All的实现更改为:

private static List<DistanceItem> _all;
public static List<DistanceItem> All
{
    get 
    {
        if (_all == null)
        {
            _all = new List<DistanceItem>
            {
                new DistanceItem { Display="1 mile", Kilometers=1.6 },
                new DistanceItem { Display="2 miles", Kilometers=3.2 },
                new DistanceItem { Display="5 miles", Kilometers=8.0 },
                new DistanceItem { Display="10 miles", Kilometers=16.1 },
                new DistanceItem { Display="20 miles", Kilometers=32.2 },
                new DistanceItem { Display="50 miles", Kilometers=80.5 },
                new DistanceItem { Display="100 miles", Kilometers=160.9 }
            };
        }
        return _all;
    }
}

这将确保DistanceSelection从Picker从其ItemsSource绑定中显示的同一集合中返回一个对象,而不是具有相同值但来自不同集合的对象。

以上是关于选取器不显示先前的选择的主要内容,如果未能解决你的问题,请参考以下文章

在工作表内的表单中使用选取器不起作用

OpenGL片段着色器不照亮场景

日期选择器不工作/显示 - Bootstrap 5

Ionic 3 日期时间选择器不显示日期

ajax调用后div中的日期选择器不起作用

带有 Ajax 的 Jquery 日期选择器不起作用