WPF - 从数据中获取超链接命令?

时间:2009-04-21 13:07:27

标签: wpf mvvm hyperlink

在WPF中,如何获取超链接应从对象属性调用的Command的引用?

我正在使用MVVM模式创建一个WPF应用程序。主窗口中的列表框会显示超链接。单击时,每个超链接都将调用视图模型的ICommand属性之一。如何指定应调用哪个ICommand?

以下是我到目前为止所尝试的内容:超链接包含在ViewModel.Hyperlinks属性中,该属性绑定为列表框的ItemsSource。 “超链接”属性包含MyHyperlink类型的对象:

public class MyHyperlink
{
    public string Text { get; set; }
    public string ViewModelCommand { get; set; }
    public int RecordID { get; set; }
}

MyHyperlink.ViewModelCommand属性包含单击超链接时应调用的视图模型ICommand的名称。我想使用该值为WPF超链接控件的Command属性指定一个PropertyPath 。 我尝试使用命令的名称为列表框创建一个PropertyPath资源,但WPF不会接受它。这是我的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>

如何指定单击超链接时应调用哪个ICommand?我是创建资源(如上所示),还是以其他方式完成?我需要在XAML中执行此操作 - 我不想诉诸代码隐藏。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

我认为您的上述代码不起作用,因为Hyperlink.Command的类型为ICommand,而不是string。您需要修改MyHyperlink类,以便ViewModelCommand也是ICommand,或者编写一个IValueConverter,根据命令找到正确的ICommand实现视图模型中的名称。

答案 1 :(得分:1)

我已经实现了一个使用IValueConverter的解决方案。它写成an article on The Code Project。希望它可以帮助其他人。