Como vincular List <string> a um DependencyProperty

Estou tentando aprender sobre DependencyProperty. Para isso, quero criar um novoUserControl que exibe uma lista.

O local desta lista deve existir no pai como uma propriedade. Para isso, eu só tenhoMainWindow, MainWindowViewModel (esses são os pais) e oUserControl (o filho) (que está usando o code behind).

Na minha MainWindow eu tenho

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

E no código por trás

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

E o ViewModel

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

NoUserControl eu tenho

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

E o código por trás é

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

O problema que tenho é que a ligação não está funcionando. Eu posso ver isso na janela de saída, com o erro:

Erro 40: Erro no caminho BindingExpression: propriedade 'MessageList' não encontrada no 'objeto' '' MainWindowViewModel '(HashCode = 26034861)'. BindingExpression: Path = MessageList; DataItem = 'MainWindowViewModel' (HashCode = 26034861); o elemento de destino é 'ListView' (Nome = ''); propriedade de destino é 'ItemsSource' (tipo 'IEnumerable')

Eu entendo o problema, mas estou confuso com isso. Ele está procurando no lugar certo (no MainWindowViewModel), mas está procurando, não entendo por que oUserControl está procurando oMessageList noMainWindowViewModel. Eu acho que é porque é onde eu configuro o datacontext, mas eu também pensei que se eu adicionassethis.DataContext = this; para o construtor do UserControl, está errado (tentei, também não funcionou).

Atualizando meuUserControl para

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

Ajuda no sentido de não receber a mensagem de erro, mas também não vejo o resultado.

Isto é o que eu acho que está acontecendo quando o aplicativo é carregado:

Cargas da janela principalMainWindow, em seguida, consulte o UserControl e observa que ele requer uma propriedade.Antes de o WPF chamar o construtor UserControl, ele obtém o valor da propriedade. Em seguida, inicializa o componente e envia automaticamente o valor para a propriedade do UserControl

Como meu UserControl pode usar a propriedade Parents (MainWindow) (Messages)

questionAnswers(1)

yourAnswerToTheQuestion