Wie kann ich in WPF einen Verweis auf den Befehl erhalten, den ein Hyperlink aus einer Objekteigenschaft aufrufen soll?WPF - Get Hyperlink-Befehl von Daten?
ich eine WPF-Anwendung erstellen, die MVVM Muster. Ein Listenfeld im Hauptfenster zeigt Hyperlinks an. Jeder Hyperlink ruft eine ICommand-Eigenschaft des Ansichtsmodells auf, wenn darauf geklickt wird. Wie gebe ich an, welcher ICommand aufgerufen werden soll? Hier
ist, was ich versucht habe, so weit: Die Hyperlinks in ViewModel.Hyperlinks Eigenschaft enthalten sind, die als die Itemssource für das Listenfeld gebunden ist. Die Hyperlinks Eigenschaft enthält Objekte vom Typ MyHyperlink:
public class MyHyperlink
{
public string Text { get; set; }
public string ViewModelCommand { get; set; }
public int RecordID { get; set; }
}
Die MyHyperlink.ViewModelCommand Eigenschaft enthält den Namen des Modellansicht ICommand, die aufgerufen werden soll, wenn der Hyperlink geklickt wird. Ich möchte diesen Wert verwenden, um einen PropertyPath für die Command-Eigenschaft des WPF-Hyperlink-Steuerelements anzugeben. Ich habe versucht, eine PropertyPath-Ressource für das Listenfeld mit dem Namen des Befehls zu erstellen, aber WPF akzeptiert dies nicht. Hier ist meine XAML:
<ListBox ItemsSource="{Binding Hyperlinks}">
<ListBox.Resources>
<PropertyPath x:Key="CommandPath" Path="{Binding ViewModelCommand}" />
</ListBox.Resources>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink Command="{StaticResource CommandPath}"
CommandParameter="{Binding Path=RecordID}">
<TextBlock Text="{Binding Text}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Wie gebe ich die ICommand aufgerufen werden soll, wenn der Hyperlink geklickt wird? Erstelle ich eine Ressource (wie oben gezeigt) oder auf andere Weise? Ich muss das in XAML tun - ich möchte nicht auf Code-Behind zurückgreifen. Danke für Ihre Hilfe!
In Ihrem Code Project-Artikel zu dynamischen Befehlen haben Sie erwähnt, dass es einen besseren Weg gibt, als einen IValueConverter zu verwenden. Können Sie uns das Geheimnis erzählen lassen? – dthrasher
Hat nicht geschwenkt. Ich benutze IValueConverter. Also, kein Geheimnis. –