2010-04-12 20 views
1

雙向綁定有以下內部對我的自定義控件不起作用:WPF,獲得兩個雙向綁定在自定義控制工作

public partial class ColorInputControl 
    { 
     public ColorInputControl() 
     { 
      InitializeComponent(); 
      colorPicker.AddHandler(ColorPicker.SelectedColorChangedEvent, 
       new RoutedPropertyChangedEventHandler<Color>(SelectedColorChanged));; 
      colorPicker.AddHandler(ColorPicker.CancelEvent, 
       new RoutedPropertyChangedEventHandler<Color>(OnCancel));    
     }  

     public static readonly DependencyProperty SelectedColorProperty = 
      DependencyProperty.Register 
      ("SelectedColor", typeof(Color), typeof(ColorInputControl), 
      new PropertyMetadata(Colors.Transparent, null)); 



     public Color SelectedColor 
     { 
      get 
      { 
       return (Color)GetValue(SelectedColorProperty); 
       //return colorPicker.SelectedColor; 
      } 
      set 
      { 
       SetValue(SelectedColorProperty, value); 
       colorPicker.SelectedColor = value;   
      } 
     } 

     private void SelectedColorChanged(object sender, RoutedPropertyChangedEventArgs<Color> e) 
     { 
      SetValue(SelectedColorProperty, colorPicker.SelectedColor);     
     }  

    } 

SelectedColor被綁定到一個觸發INotifyPropertyChanged的事件控制時,它的屬性變化。但是,我無法獲得雙向綁定工作。來自用戶界面的更改被注入數據源。但是,源自數據源的更改不會反映在用戶界面上。

我錯過了什麼? TIA。

+1

請顯示XAML綁定。並且請注意,除了調用SetValue之外,您不應在DP的setter中包含任何代碼(因爲WPF不使用您的setter) – Timores 2010-04-12 22:32:01

回答

1

絕不要在SelectColor助手中做任何工作(更新顏色選擇器)。這些都是便利的包裝,並不保證被稱爲。 (正如你可以在雙向綁定中看到的那樣)。將PropertyChangedCallback添加到SelectedColorProperty元數據中。在那裏做你的工作。