0
我有一个列表框绑定到字符串ObservableCollection
。带有文件超链接的WPF列表框mvvm
只要ObservableCollection
中的某个字符串值包含指向文件的路径,它就会显示为超链接,单击它时应打开该文件。
如何在ItemTemplate中实现此功能?
我有一个列表框绑定到字符串ObservableCollection
。带有文件超链接的WPF列表框mvvm
只要ObservableCollection
中的某个字符串值包含指向文件的路径,它就会显示为超链接,单击它时应打开该文件。
如何在ItemTemplate中实现此功能?
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}">
希望这有助于
感谢Omribitan- itemssource是一个可观察的集合。另外在observablecollection中会有很多超链接,所以NavigateUri应该指向包含路径的文本?并且不需要在Regulartemplate中有一个文本块绑定到一个属性? – user1570697
@ user1570697是:) –