Windows phone 7 如何在Mvvm灯光下清理ViewModel?

Windows phone 7 如何在Mvvm灯光下清理ViewModel?,windows-phone-7,mvvm,mvvm-light,Windows Phone 7,Mvvm,Mvvm Light,我有一个转到另一个页面的项目列表,该页面连接到一个视图模型。在这个视图模型的构造函数中,我有一些代码,可以从服务器获取该特定项的数据 我发现,当我点击后退按钮并从列表中选择另一项时,它转到另一页,构造器没有被点击 我认为这是因为虚拟机现在已经创建,并且认为它不需要新的虚拟机。我想知道如何强制清理,以便在我从列表中选择时始终抓取新的清理?我面临同样的问题,这就是我解决问题的方法 拥有BaseView类,覆盖OnNavigatedTo protected override void OnNaviga

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

我发现,当我点击后退按钮并从列表中选择另一项时,它转到另一页,构造器没有被点击


我认为这是因为虚拟机现在已经创建,并且认为它不需要新的虚拟机。我想知道如何强制清理,以便在我从列表中选择时始终抓取新的清理?

我面临同样的问题,这就是我解决问题的方法

拥有BaseView类,覆盖OnNavigatedTo

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

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

   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中,生成命令本身

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,它将执行您在xaml中设置的OnNavigatedToCommand,它将调用OnNavigatedTo,它将更新您的列表

有点乱,但MVVM:


编辑:关于清理,可以在OnNavigatedFrom中完成,其工作原理相同。或OnNavigatingFrom,这在某些情况下也很有用。

如何检索ViewModels?通过XAML还是通过代码隐藏?难道你不能使用定位器并拥有一个全面一致的静态引用吗?如果你没有从答案的注释中得到通知,请浏览一下答案。嘿,chobo,请仔细检查这个解决方案。看起来,这会导致内存泄漏。虽然,我不确定-仍在调查中。虽然它可能解决OP的问题,但它不回答如何清理viewmodel。@Jefferson为什么不?只需在OnNavigatedFrom中进行所有清理,其工作原理相同。在我看来,实际用例对于一般问题来说太特殊了。也许标题应该改写。@Jefferson我刚刚重读了这个问题。他的列表清理问题可以通过ViewModel.on导航到{MyList.ReplaceWithpulledList;}来精确解决。