MVVM Сохранение значения Триггеры выбора, когда страница открыта - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть средство выбора, это мой ViewModel. Все работает, единственная проблема в том, что тост запускается после открытия страницы? Кажется, что каждый раз, когда я открываю страницу, я сохраняю новые данные.

private List<TimeoutBetweenSentences> _sentencePause = new List<TimeoutBetweenSentences>();
private TimeoutBetweenSentences _selectedSentencePause;
public List<TimeoutBetweenSentences> SentencePause
        {
            get => _sentencePause;
            set => SetProperty(ref _sentencePause, value);
        }

        public TimeoutBetweenSentences SelectedSentencePause
        {
            get => _selectedSentencePause;
            set
            {
                this.IsBusy = true;
                SetProperty(ref _selectedSentencePause, value);
               NotificationService.ShowToast("Please wait, we are saving");

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

                new Thread(new ThreadStart(async () =>
                {

                    await LangUpDataSaverLoader.SaveUserSettings(newSetting);
                    LangUpDataSaverLoader.LoadUserSettingsAndFillAppValues();
                })).Start();

                this.IsBusy = false;
            }
        }

Загрузка сохраненных данных

        _sentencePause = FillTimoutOptions();
        var posTim = _sentencePause.FirstOrDefault(m => m.Value == LangUpUserCustomSettings.TimeoutBetweenEnglishSentences);

        if (posTim != null)
        {
            _selectedSentencePause = posTim;
        }



 public Settings()
        {


            InitializeComponent();

            BindingContext = new SettingsViewModel();

        }

my xaml

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

У вас есть Есть идеи, что может быть причиной этого? Мне нужно, чтобы событие было запущено, как только пользователь изменит элемент, а не при открытой странице.

1 Ответ

0 голосов
/ 20 апреля 2020

Вы можете вызвать код в методе set , только когда значение SelectedSentencePause было изменено.

public TimeoutBetweenSentences SelectedSentencePause
        {
            get => _selectedSentencePause;
            set
            {
                if(_selectedSentencePause!=value&&_selectedSentencePause!=null)
                {

                  this.IsBusy = true;
                SetProperty(ref _selectedSentencePause, value);
               NotificationService.ShowToast("Please wait, we are saving");

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

                new Thread(new ThreadStart(async () =>
                {

                    await LangUpDataSaverLoader.SaveUserSettings(newSetting);
                    LangUpDataSaverLoader.LoadUserSettingsAndFillAppValues();
                })).Start();

                this.IsBusy = false;
                }

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...