Xamarin Forms - SelectionChangedCommand 不会为 CollectionView 触发

Joh*_*ore 6 xamarin xamarin.forms freshmvvm

下面的代码显示了一个 CollectionView 的简单示例。我没有收到 SelectionChangedCommand 的事件。有人可以看到我做错了什么吗?

顺便说一句,完整的源代码可以在 GitHub 上找到

主页.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>
Run Code Online (Sandbox Code Playgroud)

主页面模型.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(() =>
            {
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 8

在我身边工作的几件事(除了SelectionMode = Single):

  • 确保您的 Command 签名<object>位于您的 PageModel 并根据您的需要进行任何转换(特别是当您的集合变得更复杂时)。

  • 同样在您的 XAML 中,您希望为 CollectionView 命名并使用 SelectedItem 属性。 SelectionChangedCommandParameter="{Binding SelectedItem, Source={x:Reference cvTagsCollectionView}}"


Jac*_*Hua 6

我使用你的代码并在我这边创建了一个演示,我添加了widthRequestHeightRequest以使 collectionView 工作:

 <CollectionView            
              HeightRequest="170" 
              WidthRequest="200"                        
              SelectionMode="Single" 
              SelectionChangedCommand="{Binding SelectedTagChangedCommand}"
              ItemsSource="{Binding Tags}"      
         >
Run Code Online (Sandbox Code Playgroud)

SelectionChangedCommand当我单击 CollectionView 中的不同项目后,确实触发了

我在这里上传了一个示例,您可以检查它:collectionView-selectItemChanged-xamarin.forms