Dans WPF, comment puis-je obtenir une référence à la commande qu'un lien hypertexte doit invoquer à partir d'une propriété d'objet?WPF - Récupère l'hyperlien depuis les données?
Je crée une application WPF en utilisant le modèle MVVM. Une zone de liste dans la fenêtre principale affiche des liens hypertexte. Chaque lien hypertexte invoque l'une des propriétés ICommand du modèle de vue lorsqu'il est cliqué. Comment puis-je spécifier quel ICommand devrait être appelé?
Voici ce que j'ai essayé jusqu'à présent: Les liens hypertexte sont contenus dans la propriété ViewModel.Hyperlinks, qui est liée en tant que ItemsSource pour la zone de liste. La propriété contient des objets Hyperliens de type MyHyperlink:
public class MyHyperlink
{
public string Text { get; set; }
public string ViewModelCommand { get; set; }
public int RecordID { get; set; }
}
La propriété MyHyperlink.ViewModelCommand contient le nom du modèle de vue ICommand qui doit être invoqué lorsque le lien est cliqué. Je veux utiliser cette valeur pour spécifier un PropertyPath pour la propriété Command du contrôle WPF Hyperlink . J'ai essayé de créer une ressource PropertyPath pour la zone de liste avec le nom de la commande, mais WPF ne l'acceptera pas. Voici mon 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>
Comment puis-je préciser que ICommand doit être invoqué lorsque le lien est cliqué? Est-ce que je crée une ressource (comme montré ci-dessus), ou est-ce que cela a été fait d'une autre manière? Je dois le faire en XAML - je ne veux pas recourir au code-behind. Merci de votre aide!
Dans votre article Code Project sur les commandes dynamiques, vous avez mentionné qu'il y avait un meilleur moyen que d'utiliser un IValueConverter. Pouvez-vous nous laisser entrer dans le secret? – dthrasher
Ne s'est pas déroulé. J'utilise IValueConverter. Donc, pas de secret. –