首页 > 解决方案 > 保存选取器值空异常无法将字符串转换为模型

问题描述

我在保存我的选择器值时遇到问题。我正在重写旧代码,并且正在努力保存选择器值。一旦我选择了选择器,我就有了价值,但它不会通过吸气剂。我在其他选择器上也有类似的方法,它在那里完美地工作,我真的不明白出了什么问题。唯一的问题是,如果您注意到较旧的部分,则在填充值时有 Model property.Position。请在代码中查看我的注释。我按照建议在模型和 vm 中有 Inotify

 public class SettingsViewModel : ObservableObject 
{

       private List<CustomTextSize> _textSize = new List<CustomTextSize>();
            private CustomTextSize _selectedTextSize;

        public CustomTextSize SelectedTextSize
                {
                    get => _selectedTextSize; // doesnt go through here 

                    set
                    {
                        if (_selectedTextSize != value && _selectedTextSize != null) 
                        {
                            this.IsBusy = true;
                            SetProperty(ref _selectedTextSize, value);
                            NotificationService.ShowToast("Probíhá ukládání, prosím čekejte");

                            UserSettings newSetting = new UserSettings()
                            {
                                DateSaved = DateTime.Now,
                                OptionId = (int)SettingOption.TextFontSize,
                                Value = value.Position.ToString()
                            };

                            new Thread(new ThreadStart(async () =>
                            {
                                await LangUpDataSaverLoader.SaveUserSettings(newSetting);
                                LangUpDataSaverLoader.LoadUserSettingsAndFillAppValues();
                            })).Start();

                            this.IsBusy = false;
                        }

                    }


                }

    public List<CustomTextSize> TextSize
            {
                get => _textSize;
                set => SetProperty(ref _textSize, value);

            }

       _textSize = FillTextSizeOptions();
                var customSize = _textSize.FirstOrDefault(m => m.Value == LangUpUserCustomSettings.CustomFontSize); // here should be position? But then I am getting that I cannot conevrt int to Model.
                if (customSize != null)
                {

                    _selectedTextSize = customSize;
                }




}
Model

public class CustomTextSize : ObservableObject {

    public int Position { get; set; }
    public int Value { get; set; }
    public string Text { get; set; }
}

Xaml

<Picker x:Name="textSize" WidthRequest="300"
                                VerticalOptions="CenterAndExpand"   FontSize="20"
                                 Title="{ grial:Translate A_PickerSizeOfText }"
                              ItemsSource ="{Binding TextSize}" ItemDisplayBinding="{Binding Text}" 
                              SelectedItem ="{Binding SelectedTextSize, Mode=TwoWay}"
                            grial:PickerProperties.BorderStyle="Default"
                    BackgroundColor="Transparent" 
                TextColor= "{ DynamicResource ListViewItemTextColor }" >
                            </Picker>

Old piece of code that I am rewrting





Spinner textSizeSpinner = new Spinner(MainActivity.Instance);
                ArrayAdapter textSizeAdapter = new ArrayAdapter(MainActivity.Instance, Android.Resource.Layout.SimpleSpinnerDropDownItem);
                textSizeAdapter.AddAll(FillTextSizeOptions().Select(m => m.Text).ToList());
                textSizeSpinner.Adapter = textSizeAdapter;
                textSizeSpinner.SetBackgroundColor(Color.FromHex("#3680b2").ToAndroid());
                fontSizeStepper.Children.Add(textSizeSpinner);
                initialTextSizeSpinnerPosition = FillTextSizeOptions().FirstOrDefault(m => m.Value == LangUpUserCustomSettings.CustomFontSize).Position; //here is the .Position
                textSizeSpinner.SetSelection(initialTextSizeSpinnerPosition);

protected async void TextSizeSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            if (e.Position != initialTextSizeSpinnerPosition)
            {
                dialog.SetProgressStyle(ProgressDialogStyle.Spinner);
                dialog.SetCancelable(false);
                dialog.SetMessage("Probíhá ukládání, prosím čekejte");
                dialog.Show();

                Spinner spinner = (Spinner)sender;
                Model.UserSettings newSetting = new Model.UserSettings()
                {
                    DateSaved = DateTime.Now,
                    OptionId = (int)SettingOption.TextFontSize,
                    Value = FillTextSizeOptions().First(m => m.Position == e.Position).Value.ToString(),
                };

                await LangUpDataSaverLoader.SaveUserSettings(newSetting);
                initialTextSizeSpinnerPosition = e.Position;
                LangUpDataSaverLoader.LoadUserSettingsAndFillAppValues();
                dialog.Dismiss();
            }
        }

标签: xamarin

解决方案


推荐阅读