如何防止Xamarin.Form ListView Selected Event重新注册

时间:2017-05-24 18:27:01

标签: xamarin

我正在使用listview,就像在我的Xamarin.Form中一样,并且我注意到这个代码每当我使用后退按钮回到此页面时再次注册listView的所选事件的问题。

    protected override void OnAppearing()
            {
        listView.ItemSelected += new EventHandler<SelectedItemChangedEventArgs>(OnItemSelected);
// or this same issue. listView.ItemSelected += OnItemSelected;

        }
private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
        {

            Navigation.PushAsync(GotoOtherPage);
        }

 <ListView ItemsSource="{Binding MyList}" x:Name ="listView"  CachingStrategy="RecycleElement" AutomationId="listView">

我的修复是在xaml添加选定事件之后。但是有时我在C#生成了控件,还有其他方法可以在后端C#代码中注册事件。

<ListView ItemSelected="OnItemSelected" x:Name ="listView" ItemsSource="{Binding MyList}" CachingStrategy="RecycleElement" AutomationId="listView">

2 个答案:

答案 0 :(得分:2)

拥有您的事件处理程序

void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    Navigation.PushAsync(GotoOtherPage);
}

安全订阅ListView的ItemSelected事件的方法是:

使用OnAppeaning方法

订阅您的活动
protected override void OnAppearing()
{
    base.OnAppearing();

    listView.ItemSelected += OnItemSelected;
}

取消订阅OnDisappearing

protected override void OnDisappearing()
{
    base.OnDisappearing();

    listView.ItemSelected -= OnItemSelected;
}

另请注意,没有必要创建EventHandler的实例来将事件处理程序附加到事件中。

答案 1 :(得分:0)

我认为你应该在构造函数中注册事件,而不是在OnAppearing函数中注册。