Xamarin 表单设置 Picker SelectedItem
Posted
技术标签:
【中文标题】Xamarin 表单设置 Picker SelectedItem【英文标题】:Xamarin forms set Picker SelectedItem 【发布时间】:2017-11-25 09:38:00 【问题描述】:我正在使用 xamarin 表单。
我将Picker
用于 DropDownList。
如何将 selectedItem 设置为 Picker?
我的代码
<Picker x:Name="VendorName" Title="Select" ItemDisplayBinding="Binding VendorName" SelectedItem="Binding VendorName" Style="StaticResource PickerStyle"></Picker>
服务器端代码是
Device.BeginInvokeOnMainThread(() =>
VendorName.ItemsSource = VendorList;
);
var currentVendor = new List<Vendor>();
currentVendor.Add(new Vendor VendorID = "111", VendorName = "aaaa" );
VendorName.SelectedItem = currentVendor;
【问题讨论】:
SelectedItem 应该是一个对象,而不是一个列表 非常非常感谢。工作顺利 【参考方案1】:这可能不是最有效的,但您可以循环查找索引并以这种方式设置。
for (int x = 0; x < VendorList.Count; x++)
if (VendorList[x].VendorName == currentVendor .VendorName )
VendorName.SelectedIndex = x;
【讨论】:
【参考方案2】:在 Picker 中添加所有值作为列表后
把它当作一个数组来处理
所以如果你想设置选中项只需设置选中项索引
currentVendor.SelectedIndex = 0;
0 表示您选择的项目是您添加到 Picker 的第一个项目
【讨论】:
【参考方案3】:如果您使用的是 MVVM,并且想从视图模型中设置 SelectedItem
,事情就会变得棘手。 Xamarin 中似乎存在一个错误,它阻止我们将SelectedItem
与双向绑定一起使用。更多信息:Xamarin Forms ListView SelectedItem Binding Issue 和 https://xamarin.github.io/bugzilla-archives/58/58451/bug.html。
幸运的是,我们可以轻松编写自己的Picker
。
public class TwoWayPicker : Picker
public TwoWayPicker()
SelectedIndexChanged += (sender, e) => SelectedItem = ItemsSource[SelectedIndex];
public static new readonly BindableProperty SelectedItemProperty = BindableProperty.Create(
nameof(SelectedItem), typeof(object), typeof(TwoWayPicker), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
public new object SelectedItem
get => GetValue(SelectedItemProperty);
set => SetValue(SelectedItemProperty, value);
private static void OnSelectedItemChanged(BindableObject bindable, object oldValue, object newValue)
var control = (TwoWayPicker)bindable;
control.SetNewValue(newValue);
private void SetNewValue(object newValue)
if (newValue == null)
return;
for(int i = 0; i < ItemsSource.Count; i++)
if (ItemsSource[i].Equals(newValue))
SelectedIndex = i;
return;
因为它使用相同的SelectedItem
属性,所以它是Picker
的直接替代品。
请注意,如果您希望项目类的值相等而不是引用相等,您还需要像这样覆盖 Equals
:
public override bool Equals(object obj)
var other = obj as YourClass;
if (other == null)
return false;
else
return other.SomeValue == SomeValue; // implement your own
【讨论】:
在 SetNewValue 中,您应该在 ItemsSource 上添加一个空检查,以防 SelectedItem 设置在 ItemsSource 之前。以上是关于Xamarin 表单设置 Picker SelectedItem的主要内容,如果未能解决你的问题,请参考以下文章
更改 Xamarin Forms Picker 按钮样式 [重复]
Xamarin Forms Picker - iOS 上的“完成”文本
我们如何处理 Xamarin Forms Picker 的完成按钮单击事件?