Параметр средства выбора selectedItem при втором нажатии [Xamarin] - PullRequest
0 голосов
/ 08 мая 2020

У меня есть сборщик, получающий значения из Enum. При выборе он должен отображать значение 'title', но затем связывать фактическое целочисленное значение с целочисленной переменной. Я заставил большую часть этого работать, но теперь проблема в том, что средство выбора выбирает заголовок при втором щелчке. Что мне не хватает: ниже мой код

public enum ResponseReason
{
    FirstReason = 1,
    SecondReason = 2,
    ThirdReason = 3
}

// внутри ViewModel

public int ReasonValue { get; set; }
public ObservableCollection<ResponseReason> ShowResponseReason { 
  get
   {
     return new ObservableCollection<ResponseReason>(Enum.GetValues(typeof(ResponseReason)).OfType<ResponseReason>().ToList());
   }
  }

// затем средство выбора

 <Picker
   ItemsSource="{Binding ShowResponseReason}"
   SelectedItem="{Binding ReasonValue}"
   Title="Please Select"
   HorizontalOptions="FillAndExpand"
   Style="{StaticResource PickerStyle}" />

1 Ответ

0 голосов
/ 08 мая 2020

При использовании SelectedItem, SelectedItem должен существовать в ItemsSource. Поскольку вы возвращаете новый объект ItemsSource, SelectedItem никогда не существует во вновь возвращаемом ItemsSource. Ваш тип SelectedItem также должен соответствовать вашему типу ItemsSource. Итак, ReasonValue должен иметь тип ResponseReason. Внесите следующие изменения в свою модель просмотра:

public ResponseReason ReasonValue { get; set; }

private ObservableCollection<ResponseReason> mShowResponseReason = new ObservableCollection<ResponseReason>(Enum.GetValues(typeof(ResponseReason)).OfType<ResponseReason>().ToList());
public ObservableCollection<ResponseReason> ShowResponseReason
{
    get => mShowResponseReason;
    set
    {
        mShowResponseReason = value;
        OnPropertyChanged();
    }
}

Теперь ItemsSource всегда будет содержать точный объект, который равен SelectedItem.

...