Priorytet właściwości typu WPF i typ odniesienia Wartości domyślne

Jeśli utworzę formant niestandardowy w ten sposób:

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

Następnie pozwól użytkownikowi powiązać się z nim w Xaml w ten sposób:

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

Wtedy oprawa nigdy nie działa! Wynika to zPierwszeństwo własności zależnej, który ustawia CLR Ustaw wartości powyżej powiązań szablonu!

Rozumiem więc, dlaczego to nie działa, ale zastanawiam się, czy istnieje rozwiązanie. Czy jest możliwe dostarczenie domyślnej wartości ItemsProperty do nowego ObservableCollection dla leniwych konsumentów MyControl, którzy chcą tylko programowo dodawać elementy, pozwalając jednocześnie MVVM dla zaawansowanych użytkowników My Control na powiązanie z tą samą właściwością za pomocą DataTemplate?

To jest dla Silverlight i WPF. Seter DynamicResource w stylu wydawał się rozwiązaniem, ale nie działa w Silverlight :(

Aktualizacja:

mogę potwierdzićSetCurrentValue(ItemsProperty, new ObservableCollection<object>()); robi dokładnie to, czego chcę - w WPF. Zapisuje wartość domyślną, ale może zostać nadpisana przez powiązania szablonów.Czy ktoś może zaproponować odpowiednik Silverlight? Łatwiej powiedzieć niż zrobić! : s

Kolejna aktualizacja:

Najwyraźniej można symulować SetCurrentValue w .NET3.5 za pomocą koercji wartości i można symulować wymuszanie wartości w Silverlight za pomocą tych technik. Być może istnieje tutaj (długotrwałe) obejście.

Obejście SetCurrentValue dla .NET3.5 za pomocą wymuszania wartości
Obejście problemu związanego z wartością dla Silverlight

questionAnswers(2)

yourAnswerToTheQuestion