2012-01-13 90 views
1

我有一個WPF應用程序。我有這個應用程序的不同用戶,每個用戶都有不同的關卡。更高級別的人不能訪問一些菜單項。在菜單項WPF之間切換?

有沒有辦法在菜單項之間切換?切換單個菜單項的可見性是完成此操作的有效方法嗎?有沒有其他辦法呢?

回答

3

你可以使用綁定和轉換器來實現這一點。基本上,如果您在菜單的DataContext上有一個屬性(將由菜單項繼承),該屬性指定權限級別;那麼你可以將它綁定到菜單項的可見性。

很明顯,這是因爲權限不會隱式轉換爲Visibility枚舉,你就必須創建IValueConverter接口,這將是具體到轉換的權限能見度的實現,反之亦然,基於當前的權限水平。這也需要轉換器具有當前權限級別的一些概念,所以要麼讓它訪問一些靜態屬性(我不建議這樣做),要麼需要獲取轉換器實例(確保您只使用一個實例)並將當前權限級別傳遞給它。

1

是的,Visibility屬性適用於MenuItem s。如果下面的代碼粘貼到Kaxaml,你會看到編輯菜單是隱藏的,所以是工具>項目2

<Menu> 
    <MenuItem Header="_File"/> 
    <MenuItem Header="_Edit" Visibility="Collapsed"/> 
    <MenuItem Header="_Tools"> 
    <MenuItem Header="Item 1"/> 
    <MenuItem Header="Item 2" Visibility="Collapsed"/> 
    <MenuItem Header="Item 3"/> 
    </MenuItem> 
</Menu> 

您還可以更改Visibility編程,或將其數據綁定到一個屬性你的viewmodel。

3

有幾種不同的方法可以做到這一點。切換可見性是一種方式,但如果您希望您的代碼對其他人可讀,我會建議實施某種設計模式。

我會建議遵循MVVM或MVC模式。這意味着你需要爲不同的用戶創建不同的視圖。

至於菜單項等簡單的東西,您可以將用戶控件的部分UI分離到用戶控件中,並在該用戶控件中爲不同的用戶使用不同的XAML。然後在代碼中,根據哪個用戶登錄顯示正確的XAML(查看)。