我正在尝试在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
。如果Active
为false
,则BackgroundColor
设置为红色。如果true
,则BackgroundColor
设置为绿色。
我该怎么办?谢谢。
答案 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}}" />