2015-08-26 30 views
1

在我的應用程序中,有一個數據網格由特徵服務填充。將數據網格列轉換爲超鏈接

在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代碼: 下面是我的整個數據網格代碼:

<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文檔的完整網址。

我需要使列可點擊(超鏈接)。

數據網格需要自動生成,因爲其他服務也使用網格,因此我無法將該列作爲模板在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

謝謝歐米茄粉絲的迴應。實現你的想法後,像這樣我得到可見性值的期望錯誤。你能不能讓我知道我在這裏做錯了 – ayaantara

+0

@ayaantara用實際例外更新你的問題。 – OmegaMan

+0

「System.Windows.Data.Binding」類型的對象無法轉換爲「System.Windows.Visibility」類型。這是我從消息中得到的。 – ayaantara