You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms中DataTemplate的OnSelectTemplate失效 背景色固定为红色

问题核心原因

你在DataTemplateSelector中没有读取当前条目的颜色属性,而是读取了全局共享的GetColor变量,所有条目都会匹配最后一次给GetColor赋值的结果,因此所有Frame背景色都相同。

修复步骤

1. 调整TemplateSelector逻辑

OnSelectTemplate方法的第一个入参item就是当前要渲染的GroupData实例,直接读取它的Color属性判断即可:

protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
    var currentGroupData = item as GroupData;
    if (currentGroupData?.Color == "Red")
        return RedTemplate;
    else
        return GreenTemplate;
}
public DataTemplate RedTemplate { get; set; }
public DataTemplate GreenTemplate { get; set; }

2. 删除多余的全局变量操作

业务逻辑中不需要再维护全局的GetColor变量,直接把对应的赋值代码删掉即可:

FirebaseClient fc = new FirebaseClient("...");
var result = await fc.Child("GroupData").OnceAsync<GroupData>();
foreach (var item in result)
{
    ListGroupData.Add(item.Object);
}

可选优化

如果后续需要支持更多颜色,不需要新增多个DataTemplate,可直接给Frame的BackgroundColor做绑定,搭配IValueConverter把字符串颜色值转为Color对象,代码会更简洁。

内容的提问来源于stack exchange,提问作者Steven-Carrot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:36:03