2015-08-26 4 views
1

В моем приложении есть сетка данных, которая заполняется службой функций.преобразовать столбец datagrid в гиперссылку

Используя следующий код в 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 который содержит полный URL-адрес клиентских PDF-документов.

Мне нужно сделать столбец интерактивным (гиперссылка).

Datagrid должен быть автогенерирован, так как сетка также используется другими службами, и, следовательно, я не могу кодировать столбец как шаблон в XAML. В этом сценарии я могу сделать столбцы, содержащие http://, динамической гиперссылкой столбца.

+0

У вас будет список столбцов (имена свойств), имеющих гиперссылки? или вы хотите сделать столбец гиперссылкой только тогда, когда значения имеют http: //. –

+0

Я хочу, чтобы столбец был гиперссылкой, когда у него есть http: // – ayaantara

ответ

1

Сделайте два элемента управления в столбце, в котором есть гиперссылка и одна из них. Затем создайте конвертер видимости, чтобы определить, нуждается ли текст в гиперссылке.

Если преобразователь обнаруживает 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(); 
    } 
} 

Например, если у нас было два текстовых полей это как вызов будет сделано. Обратите внимание, что мы передаем текстовый объект параметра как «обратный», вы можете передать что-либо такое, как номер 1, для того же эффекта.

<converters:HTTPVisibilityConverter x:Name="theHttpVisbilityConverter"/> 

    ... 

<TextBlock Text="{Binding .}" 
      Visibility="{Binding ., 
         Converter={StaticResource theHttpVisbilityConverter}}" /> 

<TextBlock Text="{Binding . }" 
      Visibility="{Binding ., 
         Converter={StaticResource theHttpVisbilityConverter}, 
         ConverterParameter=Reverse}" /> 
+0

Благодарим вентилятора Omega за ваш ответ. После реализации вашей идеи, как эта Я получаю ошибку обхода для значения Видимость. Не могли бы вы дать мне знать, что мое неправильное поведение здесь – ayaantara

+0

@yaantara Обновите свой вопрос с фактическим исключением. – OmegaMan

+0

Объект типа 'System.Windows.Data.Binding' не может быть преобразован в тип 'System.Windows.Visibility'. Это то, что я получаю от сообщения. – ayaantara

Смежные вопросы