Binding DependencyProperty innerhalb einer ObservableCollection

Hans_Rakete
Hallo,

um zwischen Oberfläche und einem abgleiteten Control zu kommunizieren habe ich eine ObservableCollection implementiert, diese wiederum enthält Elemente einer Klasse welche wiederum drei DependencyPropertys bereit stellt:

C#-Code:
    public class element : DependencyObject
    {
        public string Bezeichnung
        {
            get { return (string)GetValue(BezeichnungProperty); }
            set { SetValue(BezeichnungProperty, value); }
        }
        public static readonly DependencyProperty BezeichnungProperty =
            DependencyProperty.Register("Bezeichnung", typeof(string), typeof(panel_cluster), new UIPropertyMetadata(string.Empty));

        public string Vorlage
        {
            get { return (string)GetValue(VorlageProperty); }
            set { SetValue(VorlageProperty, value); }
        }
        public static readonly DependencyProperty VorlageProperty =
            DependencyProperty.Register("Vorlage", typeof(string), typeof(panel_cluster), new UIPropertyMetadata(string.Empty));

        public bool HasChanges
        {
            get { return (bool)GetValue(HasChangesProperty); }
            set { SetValue(HasChangesProperty, value); }
        }
        public static readonly DependencyProperty HasChangesProperty =
            DependencyProperty.Register("HasChanges", typeof(bool), typeof(panel_cluster), new UIPropertyMetadata(false));
    }


    public class panel_cluster : Control
    {
        #region DPs

        public ObservableCollection<element> Panels
        {
            get { return (ObservableCollection<element>)GetValue(PanelsProperty); }
            set { SetValue(PanelsProperty, value); }
        }
        public static readonly DependencyProperty PanelsProperty =
            DependencyProperty.Register("Panels", typeof(ObservableCollection<element>), typeof(panel_cluster), new UIPropertyMetadata(new ObservableCollection<element>()));

Im Xaml kann man dann, das entsprechende Template eingebunden, folgende Daten übergeben:

XML-Code:
<local:panel_cluster Style="{StaticResource panel_cluster_template}">
                    <local:panel_cluster.Panels>
                        <local:element Bezeichnung="Hund" Vorlage="Hundehütte" HasChanges="false"/>
                        <local:element Bezeichnung="Katze" Vorlage="Körbchen" HasChanges="false" />

                    </local:panel_cluster.Panels>
                </local:panel_cluster>

Das funktioniert prima. Ersetze ich aber nun eine der Eingaben zB. "Hund" durch ein Binding bekomme ich eine Exception:

"Binding" kann nicht für die Eigenschaft "Hund" vom Typ "Element" festgelegt werden."Binding" kann nur für eine "DependencyProperty" eines Dependency Objects" festgelegt werden.

Damit stehe ich ein wenig auf dem Schlauch, bei element handelt es sich doch um ein DependencyObject. Kann mir jemand helfen? Vielen Dank.
powerbond007
Hallo Hans_Rakte,

deine DPs sind zwar in der Klasse "element" aber für den Typ "panel_cluster" registriert (der 3. Parameter im "Register"-Aufruf). Wenn du den auf "typeof(element)" änderst müsste es passen.
Hans_Rakete
stimmt, vielen Dank!
Hans_Rakete
Das Binding funktioniert nun so weit als das die Werte beim Start übergeben werden; eine aktualisierung der Werte über das Binding findet aber nicht statt.

(statt "Katze" ein Binding an "tier" - ändert sich "tier" im Betrieb der Anwendung so wird der Wert nicht in die Collection übergeben)

Warum verhält sich nun eine ObservableCollection aus DependencyPropertys anders als eine einzelene DependencyProperty??