Windows phone 7 WP7第二个全景项目的全景项目绑定

Windows phone 7 WP7第二个全景项目的全景项目绑定,windows-phone-7,binding,mvvm,Windows Phone 7,Binding,Mvvm,我正在使用Panorama WP7项目,并且在将viewmodels绑定到视图时遇到问题。因为我的视图是全景图,所以我希望第一个全景图项目有一个视图模型,第二个全景图项目有一个视图模型 如果我给全景项目赋予x:Name属性,我就可以做到这一点,但我尽量不这么做,因为MVVM不鼓励使用x:Name属性。不过,我尝试过的替代方案没有奏效。将整个全景的DataContext设置为一个viewmodel很容易,但是我没有第二个全景所需的数据。如果我尝试将DataContext分配给该items Load

我正在使用Panorama WP7项目,并且在将viewmodels绑定到视图时遇到问题。因为我的视图是全景图,所以我希望第一个全景图项目有一个视图模型,第二个全景图项目有一个视图模型

如果我给全景项目赋予x:Name属性,我就可以做到这一点,但我尽量不这么做,因为MVVM不鼓励使用x:Name属性。不过,我尝试过的替代方案没有奏效。将整个全景的DataContext设置为一个viewmodel很容易,但是我没有第二个全景所需的数据。如果我尝试将DataContext分配给该items Loaded event handler中的每个Panoramate,我可以通过Loaded event handler中的sender参数获取Panoramate的引用,但是编译器会为第二个Loaded event handler抛出一个错误-显然,您无法将一个Loaded event分配给一个Panorama中的两个Panoramate。因此,我无法将任何事件分配给第二个全景项目

有人能帮忙吗

谢谢,
安迪

好的,我想出来了。可以在全景的已加载事件中使用sender对象将DataContext分配给全景中的全景项目,如下所示:

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;
    }

在本例中,您必须知道您的全景项目将是什么,它们不是动态的,但此方法允许您避免在XAML中使用x:Name’命名控件

好吧,我想出来了。可以在全景的已加载事件中使用sender对象将DataContext分配给全景中的全景项目,如下所示:

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;
    }
在本例中,您必须知道您的全景项目将是什么,它们不是动态的,但此方法允许您避免在XAML中使用x:Name’命名控件