绑定到ObservableCollection附加属性

时间:2010-05-02 00:43:14

标签: c# wpf data-binding

我想创建一个ObservableCollection类型的附加属性< Notification>并将其绑定到DataContext上相同类型的属性。

目前我有:

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}"/>

不幸的是,当我实际运行这个时,我得到一个例外说明:

  

'Binding'不能在'TextBox'集合中使用。 '绑定'只能在DependencyObject的DependencyProperty上设置。

当附加属性是ObservableCollection类型时,这似乎只是一个问题,因此看起来WPF在绑定此类型的属性时会尝试做一些神奇的事情,并在此过程中感到困惑。任何人都知道我需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分: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));