【发布时间】:2015-01-20 09:45:32
【问题描述】:
只是摆弄一些 WP8.1 开发 + MVVM-Light 工具包,并且在试图弄清楚如何实现某些目标时遇到了麻烦..
基本上:
- 我有一个
View(我们称之为View1),它有一个控件(在本例中为LongListSelector),它数据绑定到一个项目集合(我们称之为DataItem)(由Service来自ViewModel)
我想要这样:
- 当用户点击此控件中的特定项目时,它将被点击的项目(或该项目的属性)传递给新的
View(称为View2),这将创建一个新的ViewModel用于View2或重新使用现有的(取决于SimpleIoC中实例的Key,由DataItem中的某些属性确定)。 - 这个新的
ViewModel然后使用DataItem在其构造函数中的传递属性从不同的Service获取数据
那么我该如何实现呢?我正在考虑在控件的SelectionChanged 事件上创建/注册新的ViewModel,并将其传递给Service 和Property,如下所示:
private void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataItem item = e.AddedItems[0] as DataItem;
SimpleIoc.Default.Register(() => new ViewModel2(new Model2Service(), item.Name));
NavigationService.Navigate(new Uri("/View2.xaml", UriKind.Relative));
}
这对 first DataItem 的点击效果很好,但在第二个被点击时效果不佳。
注意:我无法在ViewModelLocator 中注册ViewModel2,因为我无法将DataItem 属性传递给ViewModel2 的构造函数,这就是我尝试注册它的原因别处。
不确定这是否符合 MVVM 架构,我想不是 this answer 声明我不应该在我的 View 中处理这个问题。
回顾一下,我希望用户能够点击LongListSelector 中的项目,然后将用户导航到新的View,该View 绑定到新的(或现有的)ViewModel到所选项目的属性。我怎样才能做到这一点?
任何帮助将不胜感激。
【问题讨论】:
标签: c# windows-phone-8 mvvm windows-phone-8.1 mvvm-light