如何编辑绑定到自定义ConfigurationElementCollection的数据

时间:2016-05-17 14:55:49

标签: wpf vb.net data-binding visual-studio-2015 configuration-files

我使用的是自定义ConfigurationElementCollection Implements INotifyCollectionChanged。可以存储在集合中的每个元素(所有元素都继承ConfigurationElement),也是Implements INotifyPropertyChanged

我有一个配置处理程序类,它在调用构造函数时将集合存储在属性(CustomCollection)中。此ConfigHandlerImplements INotifyPropertyChanged

构造函数如下:

 _config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
CustomCollection = (DirectCast(_config.GetSection("CustomCollection"), CustomConfigurationSection)).CustomCollection

我可以很好地绑定到CustomCollection:

 <DataGrid DataContext="{Binding Source={x:Static l:Handlers.ConfigHandler}}" ItemsSource="{Binding Path=CustomCollection}" />

这会正确显示屏幕上的所有元素。

然而,只要我尝试编辑其中一个元素,我就会遇到异常:

System.InvalidOperationException: 'EditItem' is not allowed for this view.
    at System.Windows.Controls.ItemCollection.System.ComponentModel.IEditableCollectionView.EditItem(Object item)
    at System.Windows.Controls.DataGrid.EditRowItem(Object rowItem)
    ...

如何使此绑定可编辑?我能想到的唯一方法是制作一些更传统的类(即不是配置类)并将所有数据复制到那些 - 但是当我已经获得所有可观察的属性时,这似乎是浪费需要建立。

1 个答案:

答案 0 :(得分:1)

您的收藏是IEnumerable<ConfigurationElement>吗?无法在DataGrid中编辑枚举数。将其转换为List<ConfigurationElement>

ConfigurationElementCollection似乎是IEnumerable。来自msdn:

public abstract class ConfigurationElementCollection : ConfigurationElement, 
    ICollection, IEnumerable

你应该让你的班级成为List

CustomCollection = (from ConfigurationElement ce in someConfigurationElementCollection select ce).ToList();