2011-02-09 80 views
29

我正在構建一個可供許多用戶使用的應用程序。每個用戶被分類到下一個認證級別之一:在ConverterParameter中使用枚舉

public enum AuthenticationEnum 
{ 
    User, 
    Technitian,  
    Administrator, 
    Developer 
} 

某些控件(如按鈕)僅暴露於用戶的某些水平。 我有保持當前用戶的身份驗證級別的屬性:

public AuthenticationEnum CurrentAuthenticationLevel { get; set; } 

我想這個屬性的一些控件的「公開程度」屬性綁定和參數傳遞到轉換器的方法,告訴它是什麼能夠看到控件的最低認證級別。 例如:

<Button Visibility="{Binding Path=CurrentAuthenticationLevel, Converter={StaticResource AuthenticationToVisibility}, ConverterParameter="Administrator"}"/> 

意味着,只有「管理員」和「開發者」可以看到按鈕。 不幸的是,上面的代碼以字符串形式傳遞「Administrator」。當然,我可以在轉換器方法內使用Switch-Case並將字符串轉換爲AuthenticationEnum。但這很醜陋,容易出現維護錯誤(每次枚舉更改 - 轉換器方法應該更改)。

有沒有更好的方式來傳遞不平凡的對象作爲參數?

+0

您不需要將`ConverterParameter`作爲字符串傳遞 – 2011-02-09 08:14:49

+3

使Fredrik的答案爲答案Please。 – 2013-07-04 08:45:21

+0

有關其他格式和更多詳細信息,請參閱此處 - https://stackoverflow.com/questions/359699/passing-an-enum-value-as-command-parameter-from-xaml – akjoshi 2018-01-17 12:46:11

回答

4

用戶

(AuthenticationEnum)Enum.Parse(typeof(AuthenticationEnum),parameter) 

解析字符串作爲枚舉

65

ArsenMkrt的答案是正確的,

這樣做的另一種方法是使用x:靜態語法在ConverterParameter

<Button ... 
     Visibility="{Binding Path=CurrentAuthenticationLevel, 
      Converter={StaticResource AuthenticationToVisibility}, 
      ConverterParameter={x:Static local:AuthenticationEnum.Administrator}}"/> 

而在轉換器

public class AuthenticationToVisibility : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     AuthenticationEnum authenticationEnum = (AuthenticationEnum)parameter; 
     //... 
    } 
}