【问题标题】:IValueConverter removing underlying value of enum(int)IValueConverter 删除 enum(int) 的基础值
【发布时间】:2013-03-29 16:32:00
【问题描述】:

我将带有基础值 (int) 的 Enum 作为参数从 XAML 传递到 IValueConverter。这个想法是使用Enum 值对列表进行迭代以检查该值是否存在并返回Visibility enum。该列表的类型为int。但是当将Enum 传递给converter 时,我无法将Enum 转换回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 时,是否有任何方法可以保留或检索枚举的基础值。

【问题讨论】:

  • 您说您正在查看 value,但您将枚举值作为ConverterParameter 传递。您是否尝试过凝视parameter
  • 请正确格式化您的源代码。格式已经完成 - 不仅在您的代码示例中,而且在您的消息文本中 - 由一个 SO 用户完成,但您只是撤消了这些更改,从而使您的问题的可读性大大降低。
  • 有没有办法召回这篇文章?我还没有真正格式化问题?这是我的第一篇文章。
  • 是的,请参阅您的问题下方,其中显示“已编辑 ...” - 这是一个链接,可将您带到问题的编辑历史记录 :-) 您可以查看完成的每个编辑操作的差异到目前为止。
  • 发现了一个较早的相关问题:stackoverflow.com/questions/4942501/…

标签: c# .net wpf enums ivalueconverter


【解决方案1】:

您可能必须先将参数转换为枚举类型Reporting

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

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多