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>; 
    } 

有这样的一些属性。但我发布两个问题来解决问题。 有什么问题?或者我该做什么?

+0

我可以使用代码? http://images.icanhascheezburger.com/completestore/2008/2/6/ubreakedtehc128467890909707500.jpg – jonathanpeppers

在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(); 
    }