我有一段代码无法正常工作。如果我执行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语句,它将消除问题,然后它将在组合框中创建重复的字符串。然后我问自己我是否需要创建一个处理不同的方法?我不确定。
这是主要课程中的if语句
if (cbTitle.Items.Count == 0)
{
ObservableCollection<string> calledList = obj.GetList();
cbTitle.Items.Clear();
cbTitle.ItemsSource = calledList;
}
当我使用try / catch时,它会捕获错误并显示消息。所以这也不好。
所以我的问题是谁能告诉我如何解决这个问题?
答案 0 :(得分:2)
您不能同时将ItemsSource
属性和同时设置为Items
属性。如果您要在下一行设置cbTitle.Items.Clear()
属性,请尝试删除对ItemsSource
的调用,这是不必要的。
更新&gt;&gt;&gt;
您只需要设置一次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;
}
答案 1 :(得分:1)
ObservableCollection<string> calledList = obj.GetList();
calledList.Clear(); // I have to use this line of code
calledList.ItemsSource = calledList;
这解决了我的问题。我没有使用xaml因为它给了我问题。您可能还记得我在浏览记录时打开了关于组合框的线程。我设法通过使用for循环解决了这个问题。如果你愿意,可以查看我的其他帖子here
然而,这不是最终解决方案。我正在学习wpf和它的反刍操作,所以我会发现它会很有趣