【问题标题】:Using ValueConversion in a XAML application in Windows 8.1在 Windows 8.1 的 XAML 应用程序中使用 ValueConversion
【发布时间】:2015-03-11 15:26:45
【问题描述】:

我正在为我为工作而创建的温度 windows phone 8.1 应用程序创建一个简单的值转换器。看,我在这里找到了一个很好的例子 (http://www.nullskull.com/faq/74/using-convertback-method-in-an-ivalueconverter.aspx)。

所以,很高兴找到这个示例,我继续使用我的 wp8.1 应用程序继续我的工作。事情是,MSDN 说它在 8.1 和很多平台上都不受支持。

这个简短的介绍导致了以下问题:在Windows 8.1中是否可以实现IValueConverter接口而不必使用泛型方法:Convert(object value, Type targetType, object parameter, string language) & ConvertBack(object value ,类型targetType,对象参数,字符串语言)

您将能够在下面我尝试使用的示例中找到代码。感谢您的洞察力!

[ValueConversion(typeof(double), typeof(double))]
public class FahrenheitToCelsiusConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
        {
            throw new ArgumentNullException("value");
        }
        // Fahrenheit to Celsius
        double fahrenheit;
        if (double.TryParse(value.ToString(), out fahrenheit))
        {
            var celsius = (fahrenheit - 32) * 5 / 9;
            return celsius;
        }

        throw new ArgumentException("value must be double");
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
        {
            throw new ArgumentNullException("value");
        }
        // Celsius to Fahrenheit
        double celsius;
        if (double.TryParse(value.ToString(), out celsius))
        {
            var fahrenheit = celsius * 9 / 5 + 32;
            return fahrenheit;
        }

        throw new ArgumentException("value must be double");
    }

【问题讨论】:

  • 提供MSDN says that it is not supported in 8.1 and also on a lot of platforms的来源。
  • 我尝试了代码,但是当我尝试构建解决方案时,我的转换器类中出现错误,告诉我接口没有实现并给了螺柱@dkozl
  • @kennyzx 看来我读得很快。 msdn 上的正确内容是“Windows 8.1、Windows Server 2012 R2、Windows 8、Windows Server 2012、Windows 7、Windows Vista SP2、Windows Server 2008(不支持服务器核心角色)、Windows Server 2008 R2(支持服务器核心角色) SP1 或更高版本;不支持 Itanium)"
  • 我刚刚在我的计算机上所做的只是在字符串实例中更改cultureInfo 实例。由于我两者都没有使用,我认为它会对我的代码产生任何影响,而且似乎是的。但这很奇特。我认为我举的例子没有正确实现导致我的构建错误的接口

标签: c# wpf windows xaml windows-phone-8


【解决方案1】:

你没有正确实现接口。

这两个方法的签名是

public object Convert(object value, Type targetType, 
        object parameter, string language)

public object ConvertBack(object value, Type targetType, 
        object parameter, string language)

注意最后一个参数是字符串,而不是 CultureInfo。您所追求的示例是针对 WPF 的。可以参考this sample,是WP专用的。

【讨论】:

  • 谢谢,这正是我所做的!你确实是对的。我没有花时间查看接口的定义,这可以解释为什么它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
相关资源
最近更新 更多