带导航的CallMethodAction会导致多次导航调用

时间:2016-04-02 13:50:11

标签: c# xaml mvvm win-universal-app

我希望在ListView中点击项目时导航到新页面。我有以下XAML(使用行为)。

<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>

我已在我的页面上启用了缓存,如下所示:

public MyPage1()
{
    this.InitializeComponent();
    NavigationCacheMode = NavigationCacheMode.Required;     
}

这是我的SubredditTapped方法:

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;           
}

现在,当我第一次点按某个项目时,框架按预期导航到MyPage2。当我导航回MyPage1(使用后退按钮)然后再次导航到MyPage2(通过点按某个项目)时,会调用SubredditTapped方法两次。当我来回导航时,这个数字会不断增加 由于禁用MyPage1上的缓存可以解决此问题,因此我怀疑每次导航SubredditTapped时,方法ItemClick都会添加到MyPage1的委托列表中。我该如何防止这种情况发生?在不破坏MVVM的情况下,这样做的正确方法是什么?

编辑:行为SDK中的错误已在较新版本中修复。所以这很有效。

1 个答案:

答案 0 :(得分:0)

在ViewModel上有Subreddits,为SelectedSubreddit创建Subreddit类型的属性,并使用2way绑定将ListBox的SelectedItem绑定到这个新属性。然后在新属性的setter中(当选择列表项时将调用它),您可以在那里调用该方法。