我有一个绑定(bind)到字符串ObservableCollection
的ListBox。
每当 ObservableCollection 中的特定字符串值包含文件路径时,它应该显示为超链接,并且在单击时应该打开该文件。
如何在 ItemTemplate 中实现此功能?
最佳答案
您可以使用 DataTemplateSelector 来实现此目的
public class HyperlinkDataTemplateSelector : DataTemplateSelector
{
public DataTemplate RegularTemplate { get; set; }
public DataTemplate HyperlinkTemplate { get; set; }
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
var str = item as string;
// Check if str contains path and return the dataTemplate accordingly
return // Either RegularTemplate or HyperlinkTemplate
}
}
在 xaml 中
<local:HyperlinkDataTemplateSelector x:Key="itemTemplateSelector">
<local:HyperlinkDataTemplateSelector.RegulatTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=YourProperty}"/>
</DataTemplate>
</local:HyperlinkDataTemplateSelector.RegularTemplate>
<local:HyperlinkDataTemplateSelector.HyperlinkTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink NavigateUri="{Binding Path=YourProperty}">
<TextBlock Text="{Binding Path=YourProperty}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</local:HyperlinkDataTemplateSelector.HyperlinkTemplate>
</local:HyperlinkDataTemplateSelector>
在您的 ListBox
声明中使用您的 DataTemplateSelector
<ListBox ItemsSource="{Binding Path=YourCollection}" ItemTemplateSelector="{StaticResource itemTemplateSelector}">
希望这有帮助
关于带有文件超链接 mvvm 的 WPF 列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19066725/