2011-09-08 93 views
1

我想創建自己的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

回答

0

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