我有一个组合框,单击按钮时会正确填充一些字段ID。
private void Button_Click(object sender, RoutedEventArgs e)
{
results.Items.Add(ID);
}
现在我希望当我更改某个值以删除以前的值(或者我在组合框中有多个值时的值)但是我总是得到异常(如果在组合框中已经选择了某个值) 我尝试在顶部添加该方法:
results.Items.Clear();
我试过这个:
for (int i = 0; i < results.Items.Count; i++)
{
results.Items.RemoveAt(i);
i--;
}
但总是得到例外:
System.ArgumentException:值不在预期范围内。 在MS.Internal.XcpImports.MethodEx(IntPtr ptr,String name,CValue [] cvData) 在MS.Internal.XcpImports.MethodPack(IntPtr objectPtr,String methodName,Object [] rawData) 在MS.Internal.XcpImports.Collection_Add [T](PresentationFrameworkCollection'1集合,对象值) 在System.Windows.PresentationFrameworkCollection'1.AddImpl(Object value) 在System.Windows.Controls.ItemCollection.AddImpl(Object value) 在System.Windows.Controls.ItemCollection.AddInternal(Object value) 在System.Windows.PresentationFrameworkCollection'1.Add(T值) 在SXPCreateIncident3.SilverlightControl1.results_SelectionChanged(Object sender,SelectionChangedEventArgs e) 在System.Windows.Controls.Primitives.Selector.OnSelectionChanged(SelectionChangedEventArg
如果我没有Clear(Remove)这部分,那么每个按钮上的组合框都有更多元素点击但是我需要在点击按钮时清除之前的内容。
答案 0 :(得分:2)
在删除之前,您是否尝试取消选择所有项目:
results.SelectedIndex = -1;
results.Items.Clear();
如果Clear仍然会造成一些麻烦,那么第二种方法不应该是:
for (int i = results.Items.Count - 1; i >= 0; i--)
{
results.Items.RemoveAt(i);
}
答案 1 :(得分:0)
我不完全确定result.Items
与Combobox
绑定的方式,但您可能会尝试用新的项目替换不需要的项目:
private void Button_Click(object sender, RoutedEventArgs e)
{
// itemToRemove should already be set
var index = result.Items.IndexOf(itemToRemove);
results.Items[index ] = ID;
}
要删除多个项目,请不要使用迭代器。使用迭代器时从集合中删除东西会使迭代器混乱。但是你可以这样做:
private void Button_Click(object sender, RoutedEventArgs e)
{
for(var i = 0; i < result.Items.Count; i++)
{
// itemsToRemove should be populated with the IDs you want to remove.
if(itemsToRemove.Contains(result.Items[i])
{
result.RemoveAt(i);
}
}
result.Items.Add(ID);
}
这个循环不会搞砸,因为每次评估表达式i < result.Items.Count
时,Count
比删除ID时的Count
少一个。< / p>
修改强>
要清除组合框并用新项目填充它,您必须为组合框提供新的ItemsSource
:
private void Button_Click(object sender, RoutedEventArgs e)
{
results.ItemsSource = null;
results.ItemsSource = new List<SomeType>(); // replace SomeType with the type of ID.
results.Items.Add(ID);
}