2010-05-02 153 views
2

我想創建一個類型爲ObservableCollection的附加屬性<通知>並將其綁定到DataContext上的同一類型的屬性。綁定到ObservableCollection附加屬性

目前我有:

internal static class Squiggle 
{ 
    public static readonly DependencyProperty NotificationsProperty = DependencyProperty.RegisterAttached(
     "Notifications", 
     typeof(ObservableCollection<Notification>), 
     typeof(TextBox), 
     new FrameworkPropertyMetadata(null, NotificationsPropertyChanged, CoerceNotificationsPropertyValue)); 

    public static void SetNotifications(TextBox textBox, ObservableCollection<Notification> value) 
    { 
     textBox.SetValue(NotificationsProperty, value); 
    } 

    public static ObservableCollection<Notification> GetNotifications(TextBox textBox) 
    { 
     return (ObservableCollection<Notification>)textBox.GetValue(NotificationsProperty); 
    } 

    ... 
} 

用下面的XAML:

<TextBox 
    x:Name="configTextBox" 
    Text="{Binding Path=ConfigText, UpdateSourceTrigger=PropertyChanged}" 
    AcceptsReturn="True" 
    AcceptsTab="True" 
    local:Squiggle.Notifications="{Binding Path=Notifications}"/> 

不幸的是,當我真正運行此我得到一個異常說明:

A '綁定'不能在'TextBox'集合中使用。 '綁定'只能在DependencyObject的DependencyProperty上設置。

這似乎只所以它看起來像WPF試圖結合這種類型的屬性時,並在過程中感到困惑做一些神奇的是,當附加屬性的類型的ObservableCollection的問題。任何人都知道我需要做些什麼才能使它工作?

回答

4

DependencyProperty.RegisterAttached調用中的ownerType是註冊DependencyProperty的類型。在你的例子中,那不是TextBox,它的Squiggle。所以你想要的代碼是:

public static readonly DependencyProperty NotificationsProperty = DependencyProperty.RegisterAttached(
    "Notifications", 
    typeof(ObservableCollection<Notification>), 
    typeof(Squiggle), 
    new FrameworkPropertyMetadata(null, NotificationsPropertyChanged, CoerceNotificationsPropertyValue)); 
+0

而且我認爲所有者是你想將屬性應用到的依賴對象的類型:)。謝謝,你的解決方案完美無缺。 – 2010-05-02 06:52:26