我有一个自定义WPF控件基类。该基类注册了类型为“ List ”的自定义属性。
如何在设计时初始化属性?列表中应始终有8个对象,并且用户应能够修改该对象。
我试图通过PropertyMetadata对象传递默认值,但是属性编辑器中显示的集合始终为空。
public class CustomPropertyTestBase : UserControl
{
static CustomPropertyTestBase()
{
List<object> defaultValue = new List<object>(new object[8]);
MyCustomObjectsProperty = DependencyProperty.Register("MyCustomObjects",
typeof(List<object>), typeof(CustomPropertyTestBase),
new PropertyMetadata(defaultValue));
}
public static DependencyProperty MyCustomObjectsProperty;
[Category("MyCustomProperties")]
public List<object> MyCustomObjects
{
get;
set;
}
}
编辑:
每当我在属性编辑器中添加新对象时,这些新对象都不会存储。重新打开属性编辑器后,列表再次为空。
我已将调试器附加到设计器,并且该属性的get或set方法从未被编辑器调用。
解:
正如“ dowhilefor”所提到的。我不得不更改类型ObservableCollection。现在,设计人员可以正确存储更改后的列表。
谢谢。
最佳答案
这样的事情应该起作用:
public MainWindow()
{
InitializeComponent();
if( System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
MyCustomObjects = new List<object>();
MyCustomObjects.Add("Hello");
}
}
但也许它不是最佳解决方案。我记得在表达式混合中有一些工具具有虚拟数据,但不记得他们是如何做到的。当然,这是静态的,您无法更改,但是我认为这是不可能的。