2013-04-07 49 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);