1

我有一个转到另一个页面的项目列表,该页面已连接到视图模型。在此视图模型的构造函数中,我有从服务器获取该特定项目的数据的代码。

我发现,当我点击后退按钮并从列表中选择另一个项目并转到另一个页面时,构造函数不会被命中。

我认为这是因为现在创建了 VM,并且认为它不需要一个新的。我想知道如何强制清理,以便在我从列表中选择时总是抓住一个新的?

4

1 回答 1

0

我遇到了同样的问题,我就是这样解决的。

有一个 BaseView 类,覆盖 OnNavigatedTo

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        if (NavigatedToCommand != null && NavigatedToCommand.CanExecute(null))
            NavigatedToCommand.Execute(null);
    }

添加依赖属性。

   public static readonly DependencyProperty NavigatedToCommandProperty =
         DependencyProperty.Register("NavigatedToCommand", typeof(ICommand), typeof(BaseView), null);
    public ICommand NavigatedToCommand
    {
        get { return (ICommand)GetValue(NavigatedToCommandProperty); }
        set { SetValue(NavigatedToCommandProperty, value); }
    }

在必要的页面上,添加到 xaml(当然,继承 BaseView )

NavigatedToCommand="{Binding OnNavigatedToCommand}"

在 ViewModel 中,make 命令本身

public RelayCommand OnNavigatedToCommand
        { get { return new RelayCommand(OnNavigatedTo); } }

并实现您要调用以更新列表的方法

public async void OnNavigatedTo()
    {
        var result = await myDataService.UpdateMyList();
        if (result.Status == OK)
            MyList = result.List;
    }

因此,现在,每次您导航到带有列表的页面时,在覆盖的 OnNavigatedTo() 内部都会执行 NavigatedToCommand,该命令将执行 OnNavigatedToCommand(您在 xaml 中设置),该命令将调用 OnNavigatedTo,这将更新您的列表。

有点乱,但是 MVVM :)

编辑:清洁怎么样,它们可以在 OnNavigatedFrom() 中完成,它的工作原理是一样的。或 OnNavigatingFrom(),在某些情况下也很有用。

于 2013-10-31T11:11:55.093 回答