Ich möchte zu einer neuen Seite navigieren, wenn auf Element in einem ListView
geklickt wird. Ich habe folgende XAML (mit Behaviors).CallMethodAction mit Navigation verursacht mehrere Navigationsaufrufe
<ListView Grid.Row="1" ItemsSource="{Binding Subreddits}" Margin="-10,20,0,0" SelectionMode="None" IsItemClickEnabled="True">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="ItemClick">
<Core:CallMethodAction TargetObject="{Binding Mode=OneWay}" MethodName="SubredditTapped"/>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</ListView>
Ich habe auf meiner Seite aktiviert Caching wie folge:
public MyPage1()
{
this.InitializeComponent();
NavigationCacheMode = NavigationCacheMode.Required;
}
meine SubredditTapped
Hier Methode:
public void SubredditTapped(object sender, object parameter)
{
var args = parameter as Windows.UI.Xaml.Controls.ItemClickEventArgs;
var clickedItem = args.ClickedItem as Subreddit;
string navigationParamName = "Subreddit";
BootStrapper.Current.SessionState[navigationParamName] = clickedItem;
BootStrapper.Current.NavigationService.Navigate(typeof(MyPage2), navigationParamName);
return;
}
Nun, wenn ich ein Element zum ersten Mal tippen, navigiert Rahmen zu MyPage2
wie erwartet. Wenn ich zurück zu MyPage1
navigiere (mit der Zurück-Taste) und dann wieder zu MyPage2
navigiere (durch Tippen auf ein Element), wird die Methode SubredditTapped
zweimal aufgerufen. Diese Zahl nimmt zu, während ich vor und zurück navigiere.
Da Deaktivieren des Cache auf MyPage1
dieses Problem los ist, vermute ich, dass die Methode SubredditTapped
wird hinzugefügt, um die Delegiertenliste von ItemClick
jedes Mal MyPage1
wird navigiert. Wie verhindere ich das? Was ist der richtige Weg dies zu tun, ohne MVVM zu brechen?
Bearbeiten: Der Fehler in Behaviors SDK wurde in neueren Versionen behoben. Das funktioniert also.
Während der Fehler in SDK behoben ist, bietet diese Antwort noch eine Problemumgehung - was gefragt wurde. – akshay2000