C# 将datagrid列转换为超链接
在我的应用程序中,有一个由功能服务填充的数据网格 在ViewModel中使用以下代码,可以实现硬编码列的可见性切换功能C# 将datagrid列转换为超链接,c#,xaml,silverlight,C#,Xaml,Silverlight,在我的应用程序中,有一个由功能服务填充的数据网格 在ViewModel中使用以下代码,可以实现硬编码列的可见性切换功能 _featureDataGridService.FeatureDataGrid.AutoGenerateColumns = true; //* to show the object id column for specific layers of a service if (_configService.ProjectConfiguration.ProjectTitle
_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\u url
的列,其中包含客户特定pdf文档的完整url
我需要使该列可点击(超链接)
datagrid需要自动生成,因为网格也被其他服务使用,因此我不能在XAML中将列硬编码为模板。在这种情况下,如何使包含http://的列动态成为超链接列。在列中创建两个控件,其中一个有超链接,另一个没有超链接。然后创建可见性转换器以确定文本是否需要超链接 如果转换器检测到HTTP,则返回可见,否则返回折叠 转换器
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}" />
...
您是否会拥有包含超链接的列列表(属性名称)?或者,您希望仅当值为http://.I 当列具有超链接时,是否希望将其作为超链接http://Thank 谢谢你的回复。在像这样实现您的想法之后,我得到了可见性值的预期错误。你能告诉我我做错了什么吗here@ayaantara使用实际异常更新您的问题。“System.Windows.Data.Binding”类型的对象无法转换为“System.Windows.Visibility”类型。这是我从消息中得到的。@ayaantara您没有在绑定到的示例上显示名为Value
的属性,而是OBJECTID
。为什么要买新的?没有完整的代码示例,我无法确定值是什么以及为什么不能绑定。请查收。当我从中删除可见性零件时