将数据网格列转换为超链接
本文关键字:转换 超链接 网格 数据 数据网 | 更新日期: 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}" />