Sascha Manns Ответов: 1

Как исправить не найденный обработчик событий?


Я определил элемент панели инструментов (в MainPage.xaml), который использует событие "New_CLicked" (см. То, что вы пробовали). Это событие "New_Clicked" определено в файле MainPage.xaml.cs.

Теперь, если я запускаю сборку решения, я получаю ошибку
Position 8:33. EventHandler "New_Clicked" not found in type "TripLog.Views.MainPage


Может быть, я что-то пропустил? Полный код решения можно посмотреть на сайте: GitHub - saigkill/TripLog: мое решение для освоения Xamarin.Формы[^]

Что я уже пробовал:

Файл 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"             

             x:Class="TripLog.Views.MainPage"

             Title="TripLog">



    <ContentPage.ToolbarItems>

        <ToolbarItem Text="New" Clicked="New_Clicked" />

    </ContentPage.ToolbarItems>



    <ContentPage.Content>

        <ListView x:Name="trips" ItemTapped="Trips_ItemTapped" ItemsSource="{Binding LogEntries}">

            <ListView.ItemTemplate>

                <DataTemplate>

                    <TextCell Text="{Binding Title}" Detail="{Binding Notes}" />

                </DataTemplate>

            </ListView.ItemTemplate>

        </ListView>

    </ContentPage.Content>



</ContentPage>


Файл MainPage.язык XAML.в CS:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using TripLog.Models;
using TripLog.ViewModels;

namespace TripLog.Views
{
	public partial class MainPage : ContentPage
	{
		public MainPage()
		{
			InitializeComponent();

            BindingContext = new MainViewModel();

            void New_Clicked(object sender, EventArgs e)
            {
                Navigation.PushAsync(new NewEntryPage());
            }

            async void Trips_ItemTapped(object sender, ItemTappedEventArgs e)
            {
                var trip = (TripLogEntry)e.Item;
                await Navigation.PushAsync(new DetailPage(trip));

                // Clear selection
                trips.SelectedItem = null;
            }
		}
	}
}

1 Ответов

Рейтинг:
6

Vincent Maverick Durano

Переместите определение обработчика событий за пределы конструктора класса. Например:

namespace TripLog.Views
{
	public partial class MainPage : ContentPage
	{
		public MainPage()
		{
			InitializeComponent();
            BindingContext = new MainViewModel();
		}

            void New_Clicked(object sender, EventArgs e)
            {
                Navigation.PushAsync(new NewEntryPage());
            }

            async void Trips_ItemTapped(object sender, ItemTappedEventArgs e)
            {
                var trip = (TripLogEntry)e.Item;
                await Navigation.PushAsync(new DetailPage(trip));

                // Clear selection
                trips.SelectedItem = null;
            }
	}
}


Sascha Manns

Большое спасибо. Твой совет работает.