使用可单击的链接绑定到ListBox

hac*_*sid 1 data-binding wpf mvvm

我正在开发我的第一个WPF应用程序,这很酷.今天碰到了一点砖墙.

我的应用程序充当网络搜索者 - 访问搜索引擎和检索链接.我想以可点击的格式显示链接.我想我会将string[]链接的结果绑定到a ListBox并放入Hyperlink其中.经过一些谷歌搜索,这是我想出的:

<ListBox Height="200" ItemsSource="{Binding Path=UrlsFound, Mode=OneWay}" Name="listBox1" Width="727">
    <ListBox.Resources>
        <DataTemplate DataType="String">
            <TextBlock>
                <Hyperlink NavigateUri="{Binding}" RequestNavigate="Hyperlink_RequestNavigate">
                    <TextBlock Text="{Binding}" />
                </Hyperlink>
            </TextBlock>
        </DataTemplate>
    </ListBox.Resources>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

并在代码隐藏中:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
    Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
    e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

RequestNavigate在网上的几个地方发现了代码.

所以一切都很好,并且列表框中包含所有链接,但它们不可点击.我添加了一个RequestNavigate没有被击中的断点(尝试双击),甚至尝试添加一个Click处理程序.我究竟做错了什么?

And*_*ana 6

我认为问题是您的DataTemplate与列表项没有任何关联.您应该指定ListBox.ItemTemplate而不是仅在参考资料部分中定义DataTemplate(它不像没有键的样式那样工作).

<ListBox Height="200" ItemsSource="{Binding Path=UrlsFound, Mode=OneWay}" Name="listBox1" Width="727">
    <ListBox.ItemTemplate>
        <DataTemplate DataType="String">
            <TextBlock>
                <Hyperlink NavigateUri="{Binding}" RequestNavigate="Hyperlink_RequestNavigate">
                    <TextBlock Text="{Binding}" />
                </Hyperlink>
            </TextBlock>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)