0

我有一个绑定到我的集合CarouselView,我想让 的Loop属性CarouselView仅在集合中有多个元素时才为真。这应该很容易,但我不知道为什么它不起作用

<CarouselView ItemsSource="{Binding FoodCards}" Loop="{Binding IsLooping}">

在我的ViewModel我有一个命令,当我按下某个按钮以仅显示一个元素并设置IsLoopingFalse

IsLooping = FoodCards.Count > 1;

能达到这个效果吗?或者我们不能Loop在运行时改变?

编辑:

如果我不更改集合尺寸,则以下答案中的解决方法有效。现在我有一个绑定到 3 个元素的集合,CarouselView并且我还有一个绑定了命令的按钮。该命令的代码是:

void OnChangeLoop(){
            Items.Clear();
            Items.Add("item1");
            Items.Add("item2");
            Loop = !Loop;
        }

在后面的代码中,我有PropertyChanged. 当我按下按钮时,我得到java.Lang.IllegalArgumentException: 'Invalid target position

4

1 回答 1

0

这是一个已知错误,您可以在https://github.com/xamarin/Xamarin.Forms/issues/13706上关注进度

解决方法(改编自链接的问题)

代码隐藏

YourPage()       //Constructor
{
      InitializeComponent();
      BindingContext = new YourViewModel();
      (BindingContext as YourViewModel).PropertyChanged += Vm_PropertyChanged;
}

void Vm_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == nameof(YourViewModel.IsLooping))
    {
        carousel.Loop = ((YourViewModel)BindingContext).IsLooping;
    }
}
于 2021-04-25T12:55:20.747 回答