第二次单击时选择器设置 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
。
我有一个从枚举中获取值的选择器。在 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
。