将数据网格列转换为超链接

本文关键字:转换 超链接 网格 数据 数据网 | 更新日期: 2023-09-27 18:09:54

在我的应用程序中,有一个由功能服务填充的数据网格。

在ViewModel中使用以下代码,它实现了硬编码列的可见性切换特性。
_featureDataGridService.FeatureDataGrid.AutoGenerateColumns = true;
//* to show the  object id column for specific layers of a service
if (_configService.ProjectConfiguration.ProjectTitle == "Customer profile")
{
    if (SelectedItem == "New Survey Areas")
    {
        _featureDataGridService.FeatureDataGrid.Columns[0].Visibility = Visibility.Visible; 
       //**above line of code shows the object id column of the datagrid
    }
    else
    {
        _featureDataGridService.FeatureDataGrid.Columns[0].Visibility = Visibility.Collapsed;                      
    }
}   
以下是相关的XAML代码:下面是我的整个datagrid代码:
<slData:DataGrid x:Name="CustomerDetailsDataGrid"   
ItemsSource=" {Binding     SingleReturnedItemAttributes}"  
AutoGenerateColumns="False"HeadersVisibility="None"   
ScrollViewer.HorizontalScrollBarVisibility="Visible"  
ScrollViewer.VerticalScrollBarVisibility="Visible" MaxHeight="350"   
MaxWidth="350">
<slData:DataGrid.Columns>
 <slData:DataGridTextColumn    Binding="  {Binding Path=Key}" 
  FontWeight="Bold"/>
 <slData:DataGridTextColumn Binding="{Binding Path=Value}" Visibility="
{Binding Path=Value,Converter={StaticResource theHttpVisbilityConverter}}" 
 />
 <slData:DataGridTextColumn Binding="{Binding Path=Value}" Visibility="
 {Binding Path=Value,Converter={StaticResource theHttpVisbilityConverter}, 
 ConverterParameter=reverse}" />
</slData:DataGrid.Columns>


所以现在我的数据网格有一个新的服务,它有一个名为Custmer_url的列,其中包含客户特定的pdf文档的完整url。

我需要使列可点击(超链接)。

数据网格需要自动生成,因为网格也被其他服务使用,因此我不能在XAML中硬编码该列作为模板。在这种情况下,我如何使包含http://的列动态地成为超链接列

将数据网格列转换为超链接

在列中创建两个控件,其中一个有超链接,另一个没有。然后创建一个可见性转换器,以确定文本是否需要超链接。

如果转换器检测到HTTP,则返回visible,否则返回collapse。

转换器

public class HTTPVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool boolVisbility  = (value != null) && value.ToString().StartsWith("http");
        boolVisbility = (parameter != null) ? !boolVisbility : boolVisbility;
        return boolVisbility ? Visibility.Visible : Visibility.Collapsed;
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

例如,如果我们有两个文本框,这就是调用将如何完成。注意,我们传入的参数文本对象为"reverse",你可以传入任何东西,如数字1,以达到相同的效果。

 <converters:HTTPVisibilityConverter x:Name="theHttpVisbilityConverter"/>
  ...
 <TextBlock Text="{Binding .}"
            Visibility="{Binding ., 
                         Converter={StaticResource theHttpVisbilityConverter}}" />
 <TextBlock Text="{Binding . }"
            Visibility="{Binding ., 
                         Converter={StaticResource theHttpVisbilityConverter},
                         ConverterParameter=Reverse}" />