我在我的应用中使用新的CarouselView控件来显示文本/文章的集合。集合中的每篇文章还包含一个字符串数组,我将其称为标记。我想使用允许数据绑定的控件在carouselview中水平显示这些标签。预期的外观应该是正文下面的这样的东西: Expected look of tags
关于如何实现这一目标的任何想法?
答案 0 :(得分:1)
好吧,首先是好消息/坏消息:ListView
会允许您呈现一组可绑定的标签,但遗憾的是它目前不支持Horizontal
方向,所以它不会#0;}满足您的需求。
下一个最好的事情是StackLayout
中包含的水平ScrollView
:
<ScrollView Orientation="Horizontal">
<StackLayout x:Key="tags" Orientation="Horizontal">
</StackLayout>
</ScrollView>
当绑定上下文或该属性发生更改时,使用ViewModel中的数据填充StackLayout。下面的示例使用名为&#34; TagStyleName&#34;的样式填充使用Label
视图的StackLayout填充。
// Note: If this code doesn't work, someone else wrote it.
protected override OnBindingContextChanged() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
vm.PropertyChanged += (o, e) => {
if (e.PropertyName == "Tags") {
WatchTagsForChanges();
RefreshTags();
}
};
}
private void WatchTagsForChanges() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
vm.Tags.CollectionChanged += (o, e) => RefreshTags();
}
private void RefreshTags() {
var vm = this.BindingContext as MyViewModelClass;
if (vm == null) return;
this.tags.Children.Clear()
foreach (var tag in vm.Tags) {
this.tags.Children.Add(new Label{ Text = tag, Style = "TagStyleName" }));
}
}