![](/img/trans.png)
[英]Xamarin.Forms Blinking animation for an image in DataTemplate
[英]DataTemplate OnSelectTemplate Not Working Xamarin.Forms
我有一个 CollectionView,里面有 1 个框架,框架的背景颜色会根据从数据库的每个对象收集字符串数据的变量“GetColor”的字符串值而改变,但框架的背景颜色保持为“红色”每时每刻。
#CollectionView
<CollectionView Margin="5" ItemsSource="{Binding ListGroupData}"
ItemsUpdatingScrollMode="KeepLastItemInView" ItemTemplate="{StaticResource
GroupDataTemplateSelector}" VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"/>
<ResourceDictionary>
<DataTemplate x:Key="RedTemplate">
<StackLayout>
<Frame HasShadow="False" Padding="10" HorizontalOptions="StartAndExpand"
BackgroundColor="Red"
CornerRadius="15">
<Label Text="{Binding Name}" TextColor="Black"/>
</Frame>
</StackLayout>
</DataTemplate>
<DataTemplate x:Key="GreenTemplate">
<StackLayout>
<Frame HasShadow="False" Padding="10" HorizontalOptions="EndAndExpand"
BackgroundColor="Green"
CornerRadius="15">
<Label Text="{Binding Name}" TextColor="Black"/>
</Frame>
</StackLayout>
</DataTemplate>
<Local:GroupDataViewModel x:Key="GroupDataTemplateSelector" RedTemplate="
{StaticResource
RedTemplate}" GreenTemplate="{StaticResource GreenTemplate}"/>
</ResourceDictionary>
#TemplateSelector 代码
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if (GetColor == "Red")
return RedTemplate;
else
return GreenTemplate;
}
public DataTemplate RedTemplate { get; set; }
public DataTemplate GreenTemplate { get; set; }
#公共变量
public string GetColor;
public ObservableCollection<GroupData> ListGroupData = new ObservableCollection<GroupData>();
#支持的代码
FirebaseClient fc = new FirebaseClient("...");
var result = await fc.Child("GroupData").OnceAsync<GroupData>();
foreach (var item in result)
{
GetColor = item.Object.Color;
ListGroupData.Add(item.Object);
}
///this part the item that is being added to the ListGroupData(CollectionView) suppose to
have different backgroundcolor bases on its data
您不需要公共属性GetColor
。 因为该属性会针对集合中的每个对象进行评估,而不是在视图模型中。
您将需要修改您的模板选择器
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
//Your list is a list of GroupData. then you will need to cast item to the type of your object
var targetColor = (GroupData)item.Color;
if (targetColor == "Red") //this if the item.Color is String
return RedTemplate;
else
return GreenTemplate;
}
PD:
或者,如果您的item.Color
是 Color 类型,您可以在CollectionView.ItemTemplate
使用它来为您的 Frame.You 着色。您只需要向该属性添加一个绑定。 (并且您可以删除所有 TemplateSelector 代码)
如果您的item.Color
不是 Color 类型,则必须添加一个转换器(您必须对其进行编码),以将值转换为颜色。
<CollectionView Margin="5"
ItemsSource="{Binding ListGroupData}"
ItemsUpdatingScrollMode="KeepLastItemInView"
VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Frame HasShadow="False"
Padding="10"
HorizontalOptions="EndAndExpand"
BackgroundColor="{Binding Color}"
CornerRadius="15">
<Label Text="{Binding Name}" TextColor="Black"/>
</Frame>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
快乐编码!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.