第二次单击时选择器设置 selectedItem [Xamarin]

Picker setting selectedItem on second click [Xamarin]

我有一个从枚举中获取值的选择器。在 select 上,它应该显示值 'title',然后将实际整数值绑定到一个整数变量。我已经完成了大部分工作,但现在的问题是选择器,然后 select 第二次点击标题。我缺少什么:下面是我的代码

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}" />

使用SelectedItem时,SelectedItem必须存在于ItemsSource中。由于您正在 return 创建一个新的 ItemsSource 对象,因此 SelectedItem 永远不会存在于新的 return ItemsSource 中。您的 SelectedItem 类型还需要与您的 ItemsSource 类型匹配。所以 ReasonValue 应该是类型 ResponseReason。在您的 ViewModel 中进行这些更改:

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