2013-04-07 78 views
4

我將具有基礎值(int)的Enum作爲參數從XAML傳遞到IValueConverter。我們的想法是使用Enum值對列表進行迭代以檢查值是否存在&返回Visibilityenum。該列表的類型爲int。但是,在將Enum傳遞給converter時,我無法將Enum轉換回int。 通過'快速觀察'查看參數,我根本看不到底層值或任何值。IValueConverter去除枚舉的基礎值(int)

例如,

public class Operations 
{ 
    public enum Reporting 
    { 
     ReportAccounts = 101, 
     ReportEngineering = 102, 
     ReportSoftware = 103, 
     ReportPR   = 104, 
     ReportCRM   = 105 
    } 
    public enum Editing 
    { 
     EditUser = 201, 
     EditAccess = 202, 
     EditView = 203 
    } 
} 

XAML例如

Visibility={Binding Converter={StaticResource VisibilityConverter}, 
     ConverterParameter={x:Static Operations:Reporting.ReportAccounts}} 

IValueConverter例如,

public object Convert(object value, Type targetType, object parameter, 
         System.Globalization.CultureInfo culture) 
{ 
    bool visibility = OperationList.Exists(list => list.Id == (int)parameter); 
    if (visibility == true) 
    { 
     return Visibility.Visible; 
    } 
    else 
    { 
     return Visibility.Collapsed; 
    } 
} 

我想知道是否有保留或當它傳遞給IValueConverter檢索枚舉的潛在價值的任何方式。

+0

你說你是窺視到*值*,但你通過枚舉值作爲'ConverterParameter'。您是否嘗試了一下'參數'而不是? – 2013-04-07 16:40:31

+0

請正確格式化您的源代碼。這種格式化已經完成 - 不僅在您的代碼示例中,而且在您的消息文本中 - 由一位SO用戶完成,但您只是取消了這些更改,從而使您的問題難以閱讀。 – 2013-04-07 16:52:01

+0

有沒有辦法回想起這個帖子?我沒有真正格式化這個問題?這是我的第一篇文章。 – SAm 2013-04-07 16:54:02

回答

2

您可能必須將參數強制轉換爲枚舉類型Reporting第一:

int val = System.Convert.ToInt32((Reporting)parameter); 
bool visibility = OperationList.Exists(list => list.Id == val);