Precedência da propriedade de dependência do WPF e tipo de referência Valores padrão

Se eu criar um controle personalizado como este:

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

E então permita que o usuário associe a ele no Xaml assim:

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

Então a ligação nunca funciona! Isto é devido aoPrecedência da propriedade de dependência, o que coloca os valores do CLR Set acima das ligações de Template!

Então, eu entendo porque isso não está funcionando, mas me pergunto se existe uma solução. É possível fornecer um valor padrão de ItemsProperty para novo ObservableCollection para consumidores preguiçosos de MyControl que apenas deseja adicionar itens programaticamente, enquanto permite que usuários avançados MVVM do My Control para vincular a mesma propriedade por meio de um DataTemplate?

Isso é para o Silverlight & WPF. Setter DynamicResource em um estilo parecia uma solução, mas isso não vai funcionar para o Silverlight :(

Atualizar:

Eu posso confirmarSetCurrentValue(ItemsProperty, new ObservableCollection<object>()); faz exatamente o que eu quero - no WPF. Ele grava o valor padrão, mas pode ser substituído por ligações de modelo.Alguém pode sugerir um equivalente Silverlight? Mais fácil falar do que fazer! : s

Outra atualização:

Aparentemente, você pode simular SetCurrentValue no .NET3.5 usando coerção de valor, e você pode simular coerção de valor no Silverlight usando essas técnicas. Talvez haja uma solução alternativa (prolixa) aqui.

Solução alternativa SetCurrentValue para .NET3.5 usando Coerção de Valor
Solução alternativa de Coerção de Valor para o Silverlight

questionAnswers(2)

yourAnswerToTheQuestion