DataBinding未在具有依赖项属性的自定义属性中启用
问题描述:
我想创建自己的silverlight dll以添加到另一个项目。DataBinding未在具有依赖项属性的自定义属性中启用
这个reasin我创建Silverlight LibraryControl包含一些文本框,组合框,并对象的列表(可观察集合型)
我尽量为他们创造的DependencyProperty类型的对象。
现在我想在我的第二个项目中我可以使用DataBinding填充这些属性,但是我将此项目添加到项目数据绑定中,并且其他一些项目被禁用。
我的代码是像下面
public static readonly DependencyProperty DPDescription = DependencyProperty.Register("DesCription", typeof(string), typeof(WorkFlowPfazar), new PropertyMetadata(Description_Changed));
public string Description
{
get
{
return (string)GetValue(DPDescription);
}
set
{
SetValue(DPDescription, value);
}
}
private static void Description_Changed(DependencyObject Object, DependencyPropertyChangedEventArgs Args)
{
WorkFlowPfazar wf = Object as WorkFlowPfazar;
if (wf == null)
return;
wf.tbDescription.Text = Args.NewValue.ToString();
}
public static readonly DependencyProperty DPFormNames = DependencyProperty.Register("FormNames", typeof(ObservableCollection<string>), typeof(WorkFlowPfazar),new PropertyMetadata(FormNames_Change));
public ObservableCollection <object> FormNames
{
get
{
return (ObservableCollection<object>)GetValue(DPFormNames);
}
set
{
SetValue(DPFormNames, (ObservableCollection <object>)value);
}
}
private static void FormNames_Change(DependencyObject Object, DependencyPropertyChangedEventArgs Args)
{
WorkFlowPfazar wf = Object as WorkFlowPfazar;
if (wf == null)
return;
wf.cbFormName.ItemsSource = Args.NewValue as ObservableCollection <object>;
}
有这样的一些属性。但我发布两个问题来解决问题。 有什么问题?或者我该做什么?
答
在Silverlight编码约定很重要。保存属性值为DependencyProperty
的字段应仅与该属性以及后缀“属性”具有相同的名称。传递给Register
方法的名称也应该与该属性的名称匹配。例如,您的“描述”属性应该如下所示: -
public static readonly DependencyProperty DescriptionProperty =
DependencyProperty.Register(
"Description",
typeof(string),
typeof(WorkFlowPfazar),
new PropertyMetadata(Description_Changed));
public string Description
{
get
{
return (string)GetValue(DescriptionProperty);
}
set
{
SetValue(DescriptionProperty, value);
}
}
private static void Description_Changed(DependencyObject Object, DependencyPropertyChangedEventArgs Args)
{
WorkFlowPfazar wf = Object as WorkFlowPfazar;
if (wf == null)
return;
wf.tbDescription.Text = Args.NewValue.ToString();
}
我可以使用代码? http://images.icanhascheezburger.com/completestore/2008/2/6/ubreakedtehc128467890909707500.jpg – jonathanpeppers