我使用PropertyGrid查看,编辑,添加和删除我无法修改的外部类属性的值。该类包含许多List<string>
,List<int>
,List<Guid>
属性,因此这意味着我无法使用PropertyGrid向这些列表添加值,因为它不知道如何实例化它们
所以我最初的想法是使用看起来像这样的类来包装每个类型:
public class ValueOf<T>
{
public T Value { get; set; }
public ValueOf()
{
Value = default(T);
}
public ValueOf(T valueContent)
{
Value = valueContent;
}
}
...但这意味着我必须为此类使用View Model我无法修改和编写每个属性,如下所示:
public ObservableCollection<ValueOf<string>> Names{ get; set; }
所以我搜索了一下,我找到了这个链接:http://www.michaelruck.de/2012_07_01_archive.html
它讨论了编写自定义ListCollectionView以使添加在DataGrid中工作,但它似乎也适用于PropertyGrid。它看起来像这样:
public class TypedListCollectionView<T> : ListCollectionView, IEditableCollectionView
{
private Func<T> factory;
public TypedListCollectionView(IList collection, Func<T> factory)
: base(collection)
{
this.factory = factory;
}
bool IEditableCollectionView.CanAddNew
{
get
{
return this.CanAddNewItem;
}
}
object IEditableCollectionView.AddNew()
{
T obj = this.factory();
return this.AddNewItem(obj);
}
}
我的问题是如何指定PropertyGrid应该使用哪个ListCollectionView?我是WPF的新手,似乎我错过了一些东西。