如何在xaml中使用转换器Xamarin.form

时间:2017-08-29 08:43:37

标签: xaml colors xamarin.forms converter

我有几个条目,我必须用红色或绿色着色(这取决于值是正还是负)。我在项目中创建了一个转换器,在已经创建了其他转换器的同一文件夹中(该项目不仅仅是我的)。 现在我试过了:

<my:SingolaRigaCollapsed Even="False" Height="40"  HeaderText="Variazione patrimoniale &#x0a; al lordo dei proventi" ValueText="{Binding RendimentoAlLordoProventi}" ValueColor="{Binding RendimentoAlLordoProventi, Converter={StaticResource ValueToColorConverter}}"/>  

RendimentiAlLordoProventi 是一个字符串,我想根据字符串的值来设置valuecolor。

转换器是这样的:

class ValueToColorConverters : Windows.UI.Xaml.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value.ToString().Contains("-") ? Color.Red : Color.Green;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

这样做,程序在xaml加载时崩溃,我不知道是否因为 ValueColor 属性中的绑定不正确,或其他东西。

P.S。转换器的名称是手动插入的;我不知道为什么,但这是VS唯一没有找到的转换器

1 个答案:

答案 0 :(得分:1)

我不确定你的代码出了什么问题,但我想这可能是两件事之一:

  1. 您没有在页面中声明转换器,也没有在应用程序中全局声明转换器。
  2. 为此,请将此部分添加到您的页面中:

    <ContentPage.Resources>
        <ResourceDictionary>
            <converters:ValueToColorConverter x:Key="ValueToColorConverter" />
        </ResourceDictionary>
    </ContentPage.Resources>
    

    并且不要忘记将转换器命名空间添加到应用的根目录,例如:xmlns:converters="clr-namespace:YourApp.Namespace.Converters"

    现在你应该可以像现在这样使用它。

    1. 你转换自己有什么不对。
    2. 我看到你这样做:return value.ToString().Contains("-") ? Color.Red : Color.Green;

      如果valuenull会怎样?现在,你的应用程序将爆炸。因为它接收了一个对象,所以你必须处理所有可能的场景。将其强制转换为正确的类型,确保它不为空等等。

      如果您想要更多类型,请查看MFractor。此Visual Studio for Mac扩展为您的转换器提供了类型安全性。