2016-04-02 2 views
0

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.

Antwort

0

Im ViewModel hat das die Subreddits, erstellt eine Eigenschaft des Subreddit-Typs für das SelectedSubreddit und bindet SelectedItem des ListBox an diese neue Eigenschaft mit einer 2-Wege-Bindung. Dann können Sie die Methode im Setter der neuen Eigenschaft (die aufgerufen wird, wenn ein Listenelement ausgewählt wird) aufrufen.

+0

Während der Fehler in SDK behoben ist, bietet diese Antwort noch eine Problemumgehung - was gefragt wurde. – akshay2000

Verwandte Themen