Cómo enlazar List <string> a una DependencyProperty

Estoy tratando de aprender sobre DependencyProperty. Para hacerlo quiero crear un nuevoUserControl que muestra una lista.

La ubicación de esta lista debe existir en el padre como una propiedad. Para esto solo tengoMainWindow, MainWindowViewModel (estos son los padres) y elUserControl (el hijo) (que actualmente usa el código detrás).

En mi ventana principal tengo

<Grid>
    <uc:RecentList MessageList="{Binding Messages}" />    
</Grid>

Y en el código detrás

public MainWindow()
{
    InitializeComponent();
    this.DataContext = new MainWindowViewModel();
}

Y el modelo de vista

public MainWindowViewModel()
{
    this.Messages = new ObservableCollection<string>();
    this.Messages.Add("Item 1");
    this.Messages.Add("Item 2");
    this.T = "hi";
}

public ObservableCollection<string> Messages { get; set; }

En elUserControl yo tengo

<Grid>
    <ListView ItemsSource="{Binding MessageList}"></ListView>
    <TextBlock Text="I'm such text to verify this control is showing" />
</Grid>

Y el código detrás es

public static readonly DependencyProperty MessageListProperty =
DependencyProperty.Register(
"MessageList", typeof(IEnumerable<string>), typeof(RecentList));

public IEnumerable<string> MessageList
{
    get { return (IEnumerable<string>)GetValue(MessageListProperty); }
    set { SetValue(MessageListProperty, value); }
}

El problema que tengo es que el enlace no funciona. Puedo ver esto en la ventana de salida, con el error:

Error 40: Error de ruta de BindingExpression: propiedad 'MessageList' no encontrada en 'objeto' '' MainWindowViewModel '(HashCode = 26034861)'. BindingExpression: Path = MessageList; DataItem = 'MainWindowViewModel' (HashCode = 26034861); el elemento de destino es 'ListView' (Nombre = ''); la propiedad de destino es 'ItemsSource' (tipo 'IEnumerable')

Entiendo el problema, pero estoy confundido. Está buscando en el lugar correcto (en MainWindowViewModel) pero está buscando No entiendo por quéUserControl está buscando elMessageList en elMainWindowViewModel. Supongo que es porque ahí es donde configuré el contexto de datos, pero también pensé que si agregabathis.DataContext = this; para el constructor de UserControl, entonces está mal (lo he intentado, tampoco funcionó).

Actualizando miUserControl a

<ListView ItemsSource="{Binding MessageList, RelativeSource={RelativeSource Mode=TemplatedParent}}"></ListView>

Ayuda en el sentido de que no recibo el mensaje de error, pero tampoco veo el resultado.

Esto es lo que creo que sucede cuando se carga la aplicación:

MainWindow cargasMainWindow luego ve el UserControl y observa que requiere una propiedad.Antes de que WPF llame al constructor UserControl, toma el valor de la propiedad. Luego inicializa el componente y automáticamente transfiere el valor a la propiedad de UserControl

¿Cómo puede mi UserControl usar la propiedad Parents (MainWindow) (Messages)

Respuestas a la pregunta(1)

Su respuesta a la pregunta