Vorrang von WPF-Abhängigkeitseigenschaften und Referenztyp Standardwerte

Wenn ich ein benutzerdefiniertes Steuerelement wie folgt erstelle:

public class MyControl : ContentControl
{
   public static readonly DependencyProperty ItemsProperty =               
         DependencyProperty.Register(
                "Items", 
                typeof(ObservableCollection<object>), 
                typeof(MyControl), 
                new PropertyMetadata(null));

   public MyControl()
   {   
       // Setup a default value to empty collection
       // so users of MyControl can call MyControl.Items.Add()
       Items = new ObservableCollection<object>();
   }

   public ObservableCollection<object> Items
   { 
      get { return (ObservableCollection<object>)GetValue(ItemsProperty); } 
      set { SetValue(ItemsProperty, value); } 
   } 
}

Und dann erlauben Sie dem Benutzer, sich in Xaml wie folgt daran zu binden:

<DataTemplate>
    <MyControl Items="{Binding ItemsOnViewModel}"/>
</DataTemplate>

Dann funktioniert die Bindung nie! Dies liegt an derVorrang der Abhängigkeitseigenschaft, wodurch CLR-Set-Werte über Template-Bindungen gesetzt werden!

Also verstehe ich, warum das nicht funktioniert, aber ich frage mich, ob es eine Lösung gibt. Ist es möglich, für faule Benutzer von MyControl, die nur programmgesteuert Elemente hinzufügen möchten, einen Standardwert von ItemsProperty für new ObservableCollection bereitzustellen, während MVVM-Hauptbenutzer von My Control über eine DataTemplate eine Bindung an dieselbe Eigenschaft herstellen können?

Dies ist für Silverlight & WPF. DynamicResource Setter in einem Stil schien eine Lösung, aber das funktioniert nicht für Silverlight :(

Aktualisieren:

ich kann bestätigenSetCurrentValue(ItemsProperty, new ObservableCollection<object>()); macht genau das, was ich will - in WPF. Es schreibt den Standardwert, kann aber durch Vorlagenbindungen überschrieben werden.Kann mir jemand ein Silverlight-Äquivalent vorschlagen? Leichter gesagt als getan! : s

Ein weiteres Update:

Anscheinend können Sie SetCurrentValue in .NET3.5 mithilfe von Werterzwingung simulieren und in Silverlight mithilfe dieser Techniken Werterzwingung simulieren. Vielleicht gibt es hier einen (langwierigen) Workaround.

Umgehung von SetCurrentValue für .NET3.5 mit Value Coercion
Problemumgehung für Value Coercion für Silverlight

Antworten auf die Frage(2)

Ihre Antwort auf die Frage