2012-03-30 63 views
1

我在XAML一個TabControl工作,隱藏在TabControl的特定的TabItem如果不是管理員

但我只希望根據用戶特定的TabItems可用。

Admins = 1因此應該有充分的機會到TabControl,

admins = 0因此應該只有特定的選項卡可用。

如何根據用戶隱藏特定選項卡?

謝謝。

+0

您使用的是MVVM架構嗎? – 2012-03-30 10:24:32

+0

我正在做WPF – Ebikeneser 2012-03-30 10:26:36

+1

這不是一個處理授權的非常安全的方式,如果這是阻止用戶執行管理員唯一的事情的唯一因素... – 2012-03-30 10:32:00

回答

2

有這樣做的很多方面,我想使用哪種方法取決於其中IsAdmin標誌存儲

我個人的偏好是一個DataTrigger這是基於關閉其設置靜態User對象的時候,在

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Visibility" Value="Collapsed" /> 
    <Style.Triggers> 
     <DataTrigger Value="True" Binding="{Binding IsAdmin, Source={x:Static local:Settings.CurrentUser}}"> 
      <Setter Property="Visibility" Value="Visible" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Settings用戶首次登錄會包含設置一個CurrentUser屬性時,應用程序啓動和用戶登錄到靜態類。CurrentUser有一個名爲布爾屬性

0

可以隱藏,一旦應用程序加載的所有選項卡,然後做一些簡單的像下面顯示的每個選項卡根據用戶的訪問級別:

if (userId == 1) { 
    foreach (var item in tabControl.Items) { 
    item.Visibility = Visibility.Visible; 
} 

} else if (userId == 0) { 
    tabControl.Items[TableControlYouWantVisibile].Visibility = Visibility.Visible; 
} 
1

創建一個值轉換器:

[ValueConversion(typeof(bool), typeof(Visibility))] 
public class BooleanToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     bool myValue = (bool)value; 

     if (myValue) 
      return Visibility.Visible; 
     else 
      return Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
作爲資源

添加到您的XAML:

<local:BooleanToVisibilityConverter x:Key="visibilityConverter"></local:VisibilityConverter> 

假定你的財產次在顯示如果用戶是管理員命名IsAdmin

<TabItem Visibility={Binding Path=IsAdmin, Converter={StaticResource visibilityConverter}}"> 

我認爲就是這樣。