Verwenden von Ereignissen / Befehlen mit XamlReader

Ich erstelle meine Datenvorlage dynamisch mit XamlReader.Parse (string). Das Problem, das ich habe, ist, dass ich keine Ereignisse in die Steuerelemente einfügen kann, die ich mit XamlReader erstellt habe. Nachdem ich online recherchiert habe, habe ich erfahren, dass dies eine bekannte Einschränkung von XamlReader ist.

Ich weiß nicht viel über Befehle in WPF, aber könnte ich sie irgendwie verwenden, um das gleiche Ergebnis zu erzielen? Wenn das so ist, wie? Wenn nicht, kann ich ein Ereignis in meinem Code von einem mit Xaml Reader erstellten Steuerelement aus behandeln?

Below ist ein Beispiel für die von mir erstellte Datenvorlage. Ich habe die MenuItem_Click-Ereignisbehandlungsroutine im Codebehind des Fensters definiert, das diese Datenvorlage hostet.

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, es auszuführen: System.Windows.Markup.XamlParseException wurde nicht behandelt: Fehler beim Erstellen eines "Klicks" aus dem Text "MenuItem_Click".

DataTemplate result = null;
        StringBuilder sb = new StringBuilder();

        sb.Append(@"<DataTemplate 
                        xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
                        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
                            <Grid Width=""Auto"" Height=""Auto"">

                            <TextBlock Text=""Hello"">
                                <TextBlock.ContextMenu>
                                    <ContextMenu>
                                         <MenuItem 
                                          Header=""World""
                                          Click=""MenuItem_Click""></MenuItem>
                                    </ContextMenu>
                                </TextBlock.ContextMenu>
                            </TextBlock>

                            </Grid>
                      </DataTemplate>");

        result = XamlReader.Parse(sb.ToString()) as DataTemplate;

Antworten auf die Frage(4)

Ihre Antwort auf die Frage