Xamarin在CarouselView中形成标签

时间:2016-07-06 06:22:06

标签: xamarin.ios xamarin.android xamarin.forms

我在我的应用中使用新的CarouselView控件来显示文本/文章的集合。集合中的每篇文章还包含一个字符串数组,我将其称为标记。我想使用允许数据绑定的控件在carouselview中水平显示这些标签。预期的外观应该是正文下面的这样的东西: Expected look of tags

关于如何实现这一目标的任何想法?

1 个答案:

答案 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" }));
  }
}