ItemsSource正在使用时操作无效.执行两次时,请改用ItemsControl.ItemsSource访问和修改元



我有一段代码无法正常工作。如果我执行btnNew一次就没有问题。如果我执行两次,我会得到一个错误。。。

ItemsSource正在使用时操作无效。改为使用ItemsControl.ItemsSource访问和修改元素。

主类

ClassA obj = new ClassA();         
private void btnNew_Click(object sender, RoutedEventArgs e)
{
    //List strings for clearing and then creating new strings for Title combobox
    ObservableCollection<string> calledList = obj.GetList();
    cbTitle.Items.Clear();
    cbTitle.ItemsSource = calledList;
}

ClassA.cs

private ObservableCollection<string> data = new ObservableCollection<string>();
public ObservableCollection<string> GetList()
{
    return data;
}
public void SimpleNew()
{
    data.Add("A");
    data.Add("B");
}

如果我在主类中使用if语句,它将消除问题,然后它将在组合框中创建重复的字符串。然后我问自己,我需要创建一个方法来处理distinct吗?我对此不确定。

这是我在主类中的if语句

if (cbTitle.Items.Count == 0)
{
    ObservableCollection<string> calledList = obj.GetList();
    cbTitle.Items.Clear();
    cbTitle.ItemsSource = calledList;
}

当我使用try/catch时,它会捕获错误并显示消息。所以这也不好。

所以我的问题是,有人能告诉我如何解决这个问题吗?

不能同时设置ItemsSource属性Items属性。试着简单地删除对cbTitle.Items.Clear()的调用,如果您在下一行设置ItemsSource属性,这是不必要的。


更新>>>

您只需要设置ItemsSource属性一次,最好是在XAML中:

<ComboBox ItemsSource="{Binding Items}" ... />

完成此操作后,不应再次设置它。要更改ComboBox中的项目,只需更改集合中的项目。。。它们现在是数据绑定的。。。这是WPF,而不是WinForms:

private void btnNew_Click(object sender, RoutedEventArgs e)
{
    //List strings for clearing and then creating new strings for Title combobox
    ObservableCollection<string> calledList = obj.GetList();
    Items = calledList;
}
感谢Sheridan。我还发现,如果我这样做…
ObservableCollection<string> calledList = obj.GetList();
calledList.Clear(); // I have to use this line of code
calledList.ItemsSource = calledList;

这解决了我的问题。我没有使用xaml,因为它给我带来了问题。你可能还记得我在浏览记录时打开了一个关于combobox的线程。我设法通过使用for循环解决了那个问题。如果你愿意的话,看看我的另一条线索,在这里

然而,这并不是最终的解决方案。我正在学习wpf及其cud操作,所以我将发现

最新更新