2 Stimmen

Bindung an eine ObservableCollection angehängte Eigenschaft

Ich möchte eine angehängte Eigenschaft vom Typ ObservableCollection<Notification> erstellen und sie an eine Eigenschaft desselben Typs im DataContext binden.

Derzeit habe ich:

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

    ...
}

Mit der folgenden XAML:

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

Leider erhalte ich, wenn ich das Programm ausführe, eine Ausnahme, die besagt:

Ein 'Binding' kann nicht innerhalb einer 'TextBox'-Sammlung verwendet werden. Ein 'Binding' kann nur auf eine DependencyProperty eines DependencyObjects gesetzt werden.

Dies scheint nur ein Problem zu sein, wenn die angehängte Eigenschaft vom Typ ObservableCollection ist, so dass es scheint, wie WPF versucht, etwas Magisches zu tun, wenn Eigenschaften dieses Typs binden und in den Prozess verwirrt wird. Weiß jemand, was ich tun muss, damit es funktioniert?

4voto

Joseph Sturtevant Punkte 12816

Der ownerType in der Datei DependencyProperty.RegisterAttached Aufruf ist der Typ, der die Registrierung der DependencyProperty . In Ihrem Beispiel ist das nicht TextBox , seine Squiggle . Der gewünschte Code lautet also:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X