我在WPF中有一个DataGrid(一个扩展DataGrid的类),我想编辑它中的项目。但当然我收到以下错误:
Operation is not valid while ItemsSource is in use.
Access and modify elements with ItemsControl.ItemsSource instead.
我已经尝试更改DataGrid的itemsSource,然后添加项目,但我仍然得到相同的错误。类似的东西:
public class MyDG:DataGrid{
public void add(){
List<TimesheetRecord> records = new List<TimesheetRecord>();
foreach(TimesheetRecord rec in this.Items){
records.Add(rec);
}
//DO SOME STUFF, ADD MORE ITEMS TO records
ItemCollection col = this.Items;
this.ItemsSource = records;
col.Clear();
foreach(TimesheetRecord rec in records){
col.add(red);//exception thrown here
}
this.ItemsSource = col;
}
}
当我已将itemsSource更改为其他列表时,我不明白为什么会收到该错误?
我不能(轻松地)将项目添加到最初绑定为itemsSource的列表中,因为该列表存在于不同的类中。我最好在MyDG类中有一个List<TimesheetRecord> myItems = new List<TimesheetRecord>();
的全局变量,然后在MyDG的构造函数中this.ItemsSource = myItems
或者您有什么其他建议我应该怎么做呢?我对任何事情持开放态度,因为这是我第一次使用数据绑定,所以我可能做错了...
答案 0 :(得分:4)
Decalre将收集记录为:
ObservableCollection<TimesheetRecord> records = new ObservableCollection<TimesheetRecord>();
并将其数据绑定到DataGrid。根据需要处理记录集合,数据绑定将保持UI与集合同步。
答案 1 :(得分:2)
您必须选择是否使用 Items 或 ItemsSource ,您不能互相使用。使用 ItemsSource 时尝试修改 Items 会假定不支持隐式转换,因此会出错。
在这种情况下,似乎最好的方法可能是设置 Items 并直接添加到该集合。要使用 ItemsSource ,您需要完全按照自己的意愿传递对 ItemsSource 集合( List&lt; TimesheetRecord&gt; )的引用到您的 DataGrid 类。
答案 2 :(得分:1)
将“记录”分配给ItemsSource后,您已经更新了集合。无需手动将项添加到dataGrid.Items集合。