Xamarin.Forms Tapped 事件,没有可绑定的属性

Posted

技术标签:

【中文标题】Xamarin.Forms Tapped 事件,没有可绑定的属性【英文标题】:Xamarin.Forms Tapped event, no bindable property 【发布时间】:2021-03-31 18:16:09 【问题描述】:

我正在尝试获取从 ViewModel 填充的 ListView。参考 *** 文章,这应该是一个可行的解决方案。这篇文章可以在这里找到ListView not triggering ItemTapped。

尝试编译时出现以下错误:

No property, BindableProperty, or event found for "ItemTapped", or mismatching type between value and property.

如果我从 xaml 文件中删除 ItemTapped,项目将编译并填充列表。最终目标是使 ListView 中的每个项目都可点击,从而指向特定的站点。

下面是我的代码的sn-ps

StationSelectorPage.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"
             x:Class="Company.Forms.Views.StationSelectorPage"
            xmlns:vm="clr-namespace:Company.Forms.ViewModels"
             Title="Binding Title">
    <ContentPage.BindingContext>
        <vm:StationSelectorViewModel />
    </ContentPage.BindingContext>

    <ContentPage.Content>
        <StackLayout>
            
            <Label Text="Select Station:" />
            
            <ListView 
                x:Name="StationView" 
                ItemsSource="Binding Stations"
                ItemTapped="Binding OnItemTapped">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextCell Text="Binding StationName" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

StationSelectorPage.xaml.cs

    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class StationSelectorPage : ContentPage
    
        
        public StationSelectorPage()
        
            InitializeComponent();
        
    

StationSelectorViewModel.cs


public class StationSelectorViewModel : BaseViewModel

    public List<StationsModel> m_Stations;
    public List<AreasModel> m_Areas;
    public ApiConnection m_apiConnection;
    ObservableCollection<StationsModel> stations = new ObservableCollection<StationsModel>();
    public ObservableCollection<StationsModel> Stations  get  return stations; 


    public StationSelectorViewModel()
    
        Title = "Station Selector";
        m_apiConnection = new ApiConnection(Constants.Url, null, null);
        GetStations();
    

    public async void GetStations()
    
        string absolutePath = DependencyService.Get<IMisc>().GetAbsolutePath();

        m_Areas = await m_apiConnection.HttpGetAsync<List<AreasModel>>("misc/get-areas");

        m_Stations = 
            m_Areas.
            Select(x => new StationsModel  StationId = x.StationId, StationName = x.StationName )
            .Distinct()
            .ToList();

        foreach(var station in m_Stations)
        
            Stations.Add(new StationsModel  StationId = station.StationId, StationName = station.StationName );
        

    


    public async void OnItemTapped(object group, object item, int itemIndex)
    
        var selectedItem = item;
    

【问题讨论】:

【参考方案1】:

ItemTapped 处理程序的签名是

void ItemTappedHandler(object sender, Xamarin.Forms.ItemTappedEventArgs args)

【讨论】:

我将函数调整为:public async void OnItemTapped(object sender, Xamarin.Forms.ItemTappedEventArgs args) System.Console.WriteLine("Testing"); 这给我带来了与No property, BindableProperty, or event found for "ItemTapped", or mismatching type between value and property. 相同的错误 啊,我没听懂。我不认为你绑定事件处理程序。 这种方式不能绑定 OnItemTapped 事件。你可以用Xamarin Community Toolkit ItemTappedEventArgsConverter这个video also explains怎么用好。

以上是关于Xamarin.Forms Tapped 事件,没有可绑定的属性的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Button长按事件

xamarin.forms 中的页面生命周期事件

异步事件处理程序有时会挂在 Xamarin.Forms

Xamarin.Forms TapGestureRecognizer 实现点击事件

Xamarin.Forms 监听Button的按下释放事件

xamarin.forms - 音量增大和减小键的事件侦听器