我正在使用Panorama WP7项目,我无法将视图模型绑定到我的视图中。由于我的视图是全景图,我想为第一个PanoramaItem创建一个视图模型,为第二个PanoramaItem创建第二个视图模型。
如果我给PanoramaItems提供x:Name属性,我可以使用它,但我试图不这样做,因为MVVM不鼓励使用x:Name属性。我试过的替代方案虽然没有奏效。将整个全景图的DataContext设置为一个视图模型很容易,但是我没有第二个全景图所需的数据。如果我尝试将DataContext分配给该项Loaded事件处理程序中的每个PanoramaItem,我可以通过Loaded事件处理程序中的sender参数获取对PanoramaItem的引用,但是编译器会为第二个Loaded事件处理程序引发错误 - 显然你无法将Loaded事件分配给一个Panorama中的两个PanoramaItem。就此而言,我无法将任何事件分配给第二个PanoramaItem。
有人可以帮忙吗?
感谢, 安迪
答案 0 :(得分:1)
好的,我明白了。可以使用Panorama的Loaded事件中的sender对象将DataContext分配给Panorama中的PanoramaItems,如下所示:
private void HomeViewPanorama_Loaded(object sender, RoutedEventArgs e)
{
App.VM1 = new ViewModel1();
App.VM2 = new ViewModel2();
if (!App.VM1.IsDataLoaded)
{
App.VM1.LoadData();
}
if (!App.VM2.IsDataLoaded)
{
App.VM2.LoadData();
}
Panorama panorama = sender as Panorama;
PanoramaItem Item1 = panorama.Items[0] as PanoramaItem;
Item1.DataContext = App.VM1;
PanoramaItem Item2= panorama.Items[1] as PanoramaItem;
Item2.DataContext = App.VM2;
}
在这个例子中,你必须知道你的PanoramaItem将是什么,它们不是动态的,但是这种方法可以让你克制x:在你的XAML中命名你的控件。