Xamarin如何在listview中设置不同的行颜色

时间:2017-07-11 19:09:00

标签: listview xamarin

我正在尝试在Xamarin中创建一个listView,其中行中的某些元素将根据对象中的值而有所不同。 例如。注释模型:

public class Note
{
    public string Title { get; set; }
    public string Content { get; set; }
    public bool Active { get; set; }
}

在XAML中:

<Label Text="{Binding Title}" TextColor="#f35e20" />
<Label Text="{Binding Content}" TextColor="#503026" />
<Button BackgroundColor="#000" />

我希望根据BackgroundColor字段设置按钮Active。如果Activefalse,则BackgroundColor设置为红色。如果true,则BackgroundColor设置为绿色。

我该怎么办?谢谢。

1 个答案:

答案 0 :(得分:1)

首先,创建一个值转换器,让您将颜色绑定到布尔值:

using System;
using Xamarin.Forms;
using System.Globalization;

namespace MyApp
{
    public class BoolToColorConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            bool b = ((bool)value);
            return b ? Color.Green : Color.Red;
        }

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

然后,将转换器导入xaml文件:

xmlns:local="clr-namespace:MyApp;assembly=MyApp"

将其添加到您网页的资源字典中:

<ContentPage.Resources>
  <ResourceDictionary>
    <local:BoolToColorConverter x:Key="boolToColorConverter"/>
  </ResourceDictionary>
</ContentPage.Resources>

然后你可以在绑定中使用它:

<Label Text="{Binding Title}" TextColor="#f35e20" />
<Label Text="{Binding Content}" TextColor="#503026" />
<Button BackgroundColor="{Binding Active, Converter={StaticResource boolToColorConverter}}" />