使用IValueConverter将可见性绑定到哈希码

时间:2014-07-29 13:49:20

标签: c# wpf

public class HexToHandSelectedConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Int64 temp = UInt64.Parse(value, NumberStyles.HexNumber);
        if (((Int64)temp & 0x0f) > 0) return Visibility.Collapsed;
        else return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我试图将Visibility绑定到包含我正在生成的十六进制代码的int64依赖项属性。该属性的最大值为0xFFFFFFFFFFFFFFFF。一旦函数设置了最后4位数(LAST HEX CHARACTER),控件应该会崩溃。

代码编译但我在运行程序时遇到InvalidCastException。 任何想法或想法将不胜感激。

编辑: 我刚才意识到转换器错了。控件绑定到的依赖项属性实际上是一个String,表示将转换为int64的HEX数字,在必要时修改并转换回字符串。

现在我遇到了问题 Int64 temp = UInt64.Parse(value,NumberStyles.HexNumber);

代码现在不会编译。字符串到十六进制转换虽然在这个转换器之外工作..

1 个答案:

答案 0 :(得分:0)

您假设值始终为Int64。你可能想检查一下。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
  long longValue;
  try {
    longValue = Convert.ToInt64(value);
  } catch {
    return Visibility.Visible;
  }

  if ((longValue & 0x0f) > 0) return Visibility.Collapsed;
  return Visibility.Visible;
}