wpf - 绑定(bind)到带有可点击链接的列表框

标签 wpf data-binding mvvm

我正在开发我的第一个 WPF 应用程序,它非常棒。不过今天遇到了一些困难。

我的应用充当网络搜索器——访问搜索引擎并检索链接。我想以可点击的格式显示链接。我想我会将生成的 string[] 链接绑定(bind)到 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>

在代码隐藏中:

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

我在网络上的一些地方发现了 RequestNavigate 代码。

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

最佳答案

我认为问题在于您的 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>

关于wpf - 绑定(bind)到带有可点击链接的列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4483841/

相关文章:

wpf - 如何将焦点设置在 AND SELECT ALL 初始文本框(MVVM 样式)上?

.net - 在数据网格中使用组时列折叠

android - DataBinding ViewModel获取editText大小并将其发送到新 Activity

android - ViewModel 观察到每个回 fragment

c# - 基本扩展器样式,覆盖标题颜色

WPF 触发器未按预期工作

wpf - 公开依赖项属性

c# - 绑定(bind)到 WPF 中的依赖项和常规属性

c# - 如何使用 XAML、WP 8.1 中的 DataTrigger 行为切换两个按钮的可见性?

c# - 如何测试包含 Application.Current 的方法