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;}来精确解决。