【发布时间】:2015-03-21 03:12:27
【问题描述】:
我目前正在构建一个通用应用程序,但我现在专注于它的 WP8.1 部分。我在这个项目中使用 MVVMLight。
为简单起见,我们假设我的项目中只有 2 个页面。
Page1.xaml 包含一个包含各种项目的列表。 Page1.xaml 绑定到它自己的 ViewModel,即 Page1ViewModel。列表中的每个项目都代表一个 viewModel,即 ItemViewModel。
当我点击一个项目时,我会调用以下代码:
public RelayCommand<ItemViewModel> ItemTapCommand
{
get
{
return this._itemTapCommand ?? (this._itemTapCommand =
new RelayCommand<ItemViewModel>((msg) =>
ExecuteItempTapCommand(msg)));
}
}
当点击列表中的一项时,我调用以下代码:
private object ExecuteItempTapCommand(ItemViewModel selectedItemViewModel)
{
Page2ViewModel page2ViewModel =
SimpleIoc.Default.GetInstance<ItemViewModel>();
page2ViewModel.SelectedItem = selectedItemViewModel;
_navigationService.Navigate(typeof(Page2),
selectedItemViewModel);
return null;
}
如您所见,我使用 Ioc 创建获取 Page2ViewModel 的实例,然后将 SelectedItem 设置为 selectedItemViewModel。
设置后,我导航到绑定到我的 Page2ViewModel 的 Page2。
我想知道的是,以上可以吗?在处理将对象从一个页面传递到另一个页面时,我已经看到很多示例是通过传递一个 ID 来完成的,然后我从 Page2 请求信息,但是当我需要的大部分信息已经在我的SelectedItemViewModel 因为它代表了我在 Page1 中的列表中被点击的项目。
如果不正确,使用 MVVMLight 解决此问题的最佳方法是什么?
你能提供样品吗?我已经看到了一些关于消息传递的信息,但我不确定这将如何工作,就像我导航到我的 page2 一样,Page2ViewModel 只会在页面创建时启动,那么它如何接收消息呢?我上面的方式似乎启动了 Page2ViewModel 和我的 Pag2 加载,它正在重新使用它并且一切都正确绑定,但我不确定这是正确的方法。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: c# mvvm windows-phone-8.1 mvvm-light win-universal-app