下面的代码显示了一个CollectionView的简单示例。我没有收到SelectionChangedCommand的事件。有人能看出我做错了什么吗?
顺便说一句,完整的源代码可以在GitHub here上找到。
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:ControlDemo"
x:Class="ControlDemo.MainPage">
<StackLayout>
<CollectionView SelectionMode ="Single"
ItemsSource="{Binding Tags}"
SelectionChangedCommand="{Binding SelectedTagChanged}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding .}" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</StackLayout>
</ContentPage>
MainPageModel.cs
public class MainPageModel : FreshBasePageModel
{
public override void Init(object initData)
{
Tags = new List<string>() { "A", "B", "C" };
base.Init(initData);
}
public List<string> Tags { get; set; }
public Command SelectedTagChanged
{
get
{
return new Command(() =>
{
});
}
}
}
7条答案
按热度按时间qq24tv8q1#
在我身边工作的几件事(除了
SelectionMode = Single
):<object>
,并根据你的需要进行任何转换(特别是当你的集合变得更复杂的时候)。SelectionChangedCommandParameter="{Binding SelectedItem, Source={x:Reference cvTagsCollectionView}}"
slhcrj9b2#
我使用你的代码并在我这边创建了一个演示,我添加了
widthRequest
和HeightRequest
来使collectionView工作:在我单击CollectionView中的不同项目后,
SelectionChangedCommand
确实被触发。我在这里上传了一个示例,你可以检查它:collectionView-selectItemChanged-xamarin.forms
2guxujil3#
如果你想使用ViewModel,那么你应该使用SelectedItem的绑定:
在ViewModel中:
所以每次你选择一个新的对象,SelectedMonkey就会被更新。
如果你想跟踪SelectionChanged,那么,它应该在代码隐藏中(不确定如何在视图模型中实现,文档中没有任何内容)
在您的Page.xaml.cs中:
9o685dep4#
我改进了法布里西奥·P。这样回答:
所以你的xaml部分应该是这样的:
在您的视图模型中:
wljmcqd85#
看起来您没有设置SelectionMode属性。根据docs:
默认情况下,CollectionView选择处于禁用状态。但是,可以通过将SelectionMode属性值设置为SelectionMode枚举成员之一来更改此行为:
将
SelectionMode = Single
添加到CollectionView将解决您的问题。fhity93d6#
如果您正在使用模型,则可以使用以下方法
我的C#模型视图类
这是我的XAML
tzcvj98z7#
我也有同样的问题,只有当我的命令被设置为对象时,SelectionChangedCommand才会触发,就像Fabricio P说的那样。
XAML
代码