我正在使用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">
答案 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函数中注册。