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
相关产品推荐
相关产品推荐

