Привязка к вложенному свойству ObservableCollection - PullRequest
2 голосов
/ 02 мая 2010

Я хочу создать вложенное свойство типа ObservableCollection и связать его со свойством того же типа в 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}"/>

К сожалению, когда я запускаю это, я получаю исключение:

«Связывание» нельзя использовать в коллекции «TextBox». «Связывание» может быть установлено только для свойства DependencyObject объекта DependencyObject.

Это кажется проблемой, только когда присоединенное свойство имеет тип ObservableCollection, поэтому кажется, что WPF пытается сделать что-то волшебное, когда связывает свойства этого типа и запутывается в процессе. Кто-нибудь знает, что мне нужно сделать, чтобы это работало?

1 Ответ

4 голосов
/ 02 мая 2010

OwnerType в DependencyProperty.RegisterAttached является типом, который регистрирует DependencyProperty . В вашем примере это не TextBox, а Squiggle. Итак, код, который вы хотите:

public static readonly DependencyProperty NotificationsProperty = DependencyProperty.RegisterAttached(
    "Notifications",
    typeof(ObservableCollection<Notification>),
    typeof(Squiggle),
    new FrameworkPropertyMetadata(null, NotificationsPropertyChanged, CoerceNotificationsPropertyValue));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...