2013-12-12 61 views
1

我有一個綁定到Employee對象的ObservableCollection的WPF ListView。我的XAML看起來像這樣:掩蓋WPF中列的內容ListView/GridView

<ListView x:Name="myListView" ItemsSource="{Binding Employees}"> 
    <ListView.View> 
     <GridView AllowsColumnReorder="False"> 
      <GridViewColumn DisplayMemberBinding="{Binding EmployeeName}" Width="175"> 
       <GridViewColumnHeader Content="EmployeeName"/> 
      </GridViewColumn> 
      <GridViewColumn DisplayMemberBinding="{Binding EmployeeID}" Width="125"> 
       <GridViewColumnHeader Content="EmployeeID"/> 
      </GridViewColumn> 
      <GridViewColumn DisplayMemberBinding="{Binding EmployeeSecretCode}" Width="125"> 
       <GridViewColumnHeader Content="EmployeeSecretCode"/> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

我需要顯示EmployeeSecretCode列,但我想掩蓋它的內容完全或部分。因此,我不想顯示實際的代碼(比如12345),我想要顯示*****(因爲12345是5位數字)或者********(因爲代碼的最大尺寸是8位數字)。是否有捷徑可尋?

回答

2

IValueConverter

internal class MyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    var input = value.ToString(); 
    // change "input.Length" in the following line to 8 if you just want 8 "*" regardless of length 
    return new String('*', input.Length); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
    throw new NotImplementedException(); 
    } 
} 

和XAML實現這一要求的一個簡單的例子:

<ListView x:Name="myListView" 
      ItemsSource="{Binding Employees}"> 
    <ListView.Resources> 
    <local:MyConverter x:Key="MyConverter" /> 
    </ListView.Resources> 
    ... 
     <GridViewColumn Width="125" 
         DisplayMemberBinding="{Binding EmployeeSecretCode, 
                 Converter={StaticResource MyConverter}}"> 
     <GridViewColumnHeader Content="EmployeeSecretCode" /> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
</ListView> 

注:

確實認爲這樣的實現對安全的影響在UI 。使用像Snoop這樣的應用程序,人們可以很容易地得到DataContext,因此您可以在此屏蔽實際值。因此,這僅僅是一個UI掩碼,並不提供任何可行的安全性(實際上它增加了一個薄弱環節,因爲不安全值暴露給了UI視圖)。

如果您確實在考慮這一點,那麼請將您的模型/後端中的「實際」值保留爲加密/保護,無論您認爲哪種方式合適,並且只允許查看其屬性中的屏蔽數據。這就意味着,即使有人使用類似snoop的應用程序,他們從DataContext獲得的所有內容都將是「*」,而不是實際的祕密值。

+0

非常感謝解釋和警告詞:像Snoop這樣的工具。 – user685869