Xamarin Forms CarouselView 循环绑定不起作用
Xamarin Forms CarouselView Loop Binding Doesn't work
我有一个绑定到我的 CarouselView
的集合,我想让 CarouselView
的 Loop
属性 只有在超过 1 个时才为真集合中的元素。这应该很容易,但我不知道为什么它不起作用
<CarouselView ItemsSource="{Binding FoodCards}" Loop="{Binding IsLooping}">
在我的 ViewModel
中,我有一个命令,当我按下某个按钮只显示一个元素并将 IsLooping
设置为 False
时执行
IsLooping = FoodCards.Count > 1;
这个效果能实现吗?或者我们无法在运行时更改 Loop
?
编辑:
如果我不更改集合维度,则以下答案中的解决方法有效。现在我有一个绑定到 CarouselView
的 3 个元素的集合,我还有一个绑定了命令的按钮。命令中的代码是:
void OnChangeLoop(){
Items.Clear();
Items.Add("item1");
Items.Add("item2");
Loop = !Loop;
}
并且在后面的代码中我有 PropertyChanged
的解决方法。
当我按下按钮时,我得到 java.Lang.IllegalArgumentException: 'Invalid target position
这是一个已知的错误,您可以在 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;
}
}
我有一个绑定到我的 CarouselView
的集合,我想让 CarouselView
的 Loop
属性 只有在超过 1 个时才为真集合中的元素。这应该很容易,但我不知道为什么它不起作用
<CarouselView ItemsSource="{Binding FoodCards}" Loop="{Binding IsLooping}">
在我的 ViewModel
中,我有一个命令,当我按下某个按钮只显示一个元素并将 IsLooping
设置为 False
IsLooping = FoodCards.Count > 1;
这个效果能实现吗?或者我们无法在运行时更改 Loop
?
编辑:
如果我不更改集合维度,则以下答案中的解决方法有效。现在我有一个绑定到 CarouselView
的 3 个元素的集合,我还有一个绑定了命令的按钮。命令中的代码是:
void OnChangeLoop(){
Items.Clear();
Items.Add("item1");
Items.Add("item2");
Loop = !Loop;
}
并且在后面的代码中我有 PropertyChanged
的解决方法。
当我按下按钮时,我得到 java.Lang.IllegalArgumentException: 'Invalid target position
这是一个已知的错误,您可以在 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;
}
}