【发布时间】:2017-04-02 05:58:57
【问题描述】:
我有两个选择器。第二个选择器依赖于第一个选择器。两个选择器都是从服务绑定的。我正在使用字典对象将数据绑定到选择器。 我没有使用 MVVM 模式。
- 绑定第一个选择器的字典对象的第一个服务调用。
- 然后从该字典对象中填充第一个选择器。那时第二个选择器是空的。
- 在第一个选择器调用服务的 selectedIndexChange 事件以绑定第二个选择器的字典对象。
- 现在将值从字典对象填充到第二个选择器。 (如果picker已经有数据,那么放入Picker.Items.clear())
- 现在,如果我从第二个选择器中选择一些值并更改第一个选择器的值,那么 Picker.Items.clear() 会出现错误
System.ArgumentOutOfRangeException:索引超出范围。一定是 非负数且小于集合的大小。
参数名称:索引
全球宣言:
Dictionary<string, string> DicObjActivityType;
Dictionary<string, string> DicObjSelfActivity;
First Picker 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 自定义控件。
【问题讨论】:
-
DicObjActivityType 在哪里初始化?和什么价值观。这条线是我认为导致问题的地方 var Key = DicObjActivityType.FirstOrDefault(x => x.Value == objActivityType.Items[objActivityType.SelectedIndex]).Key;
-
在清除项目之前,您是否尝试过设置 .SelectedIndex=-1? - 我想我以前可能听说过。
标签: c# xamarin xamarin.ios xamarin.android xamarin.forms