我有两个选择器。第二选择器依赖于第一选择器。这两个采购员都是来自Service的绑定。我正在使用字典对象将数据绑定到选取器。 我没有使用MVVM模式。如何清除选择器,如果它在xamarin表单中被选中?
- 第一个服务调用,其中第一个选择器的字典对象被绑定。
- 然后从该字典对象中填充第一个选择器。那时候第二选择器是空的。
- On第一个选取器调用服务的selectedIndexChange事件绑定第二个选取器的字典对象。
- 现在将值填入字典对象的第二个选择器。 (如果已经选择器有数据然后把Picker.Items.clear())
- 现在如果我选择第二个选择器,第一选择器,然后改变一些价值价值它给了我错误的Picker.Items.clear()
System.ArgumentOutOfRangeException:索引超出范围。必须为 非负数且小于集合的大小。
参数名:指数
全球宣言:第二选择器的
Dictionary<string, string> DicObjActivityType;
Dictionary<string, string> DicObjSelfActivity;
第一拾取器selectedIndexChange事件
private async void PckrActivityType_SelectedIndexChanged(object sender, EventArgs e)
{
if (sender as Picker == null)
return;
else
{
var objActivityType = sender as Picker;
var Key = DicObjActivityType.FirstOrDefault(x => x.Value == objActivityType.Items[objActivityType.SelectedIndex]).Key;
PickedActivityType = Key;
if (Key != "0")
{
PckrSelfActivity.IsEnabled = true;
await CallGetWebService_SelfActivity(Key);
if (PckrSelfActivity.IsEnabled == true)
{
PckrSelfActivity.Items.Clear();
foreach (string items in DicObjSelfActivity.Values)
{
PckrSelfActivity.Items.Add(items);
}
}
}
else
{
PckrSelfActivity.IsEnabled = false;
}
}
}
电话服务
private async Task CallGetWebService_SelfActivity(string strkey)
{
try
{
var response = await GetResponseFromWebService.GetResponse<ServiceClasses.RootObject_LstListComboData>(ServiceURL.GetSelfActivity + "ActivityTypeCd=" + strkey);
if (response.Flag == true)
{
DicObjSelfActivity = new Dictionary<string, string>();
DicObjSelfActivity.Add("0", "--Select--");
if (response.lstListComboData != null)
{
foreach (ServiceClasses.LstListComboData Items in response.lstListComboData)
{
DicObjSelfActivity.Add(Items.Value, Items.Text);
}
}
}
else
{
PckrSelfActivity.IsEnabled = false;
}
}
catch (Exception e)
{
await DisplayAlert(AppResources.LError, AppResources.LConnectionError, "OK");
}
}
我参考以下链接来解决这个问题
https://forums.xamarin.com/discussion/55922/picker-clear-system-argumentoutofrangeexception
,但没有找到解决办法。
如果选择了任何值,我们无法清除选择器?
我不想使用BindablePicker cutom控件。
DicObjActivityType initalised在哪里?并以什么价值。这条线将是我认为会导致问题的地方 var Key = DicObjActivityType.FirstOrDefault(x => x.Value == objActivityType.Items [objActivityType.SelectedIndex])。 – InitLipton
在清除项目之前,您是否尝试过设置.SelectedIndex = -1? - 我想我以前可能已经明白了这一点。 –