WP7 PanoramaItem绑定第二个PanoramaItem

时间:2012-06-06 23:22:11

标签: windows-phone-7 binding mvvm

我正在使用Panorama WP7项目,我无法将视图模型绑定到我的视图中。由于我的视图是全景图,我想为第一个PanoramaItem创建一个视图模型,为第二个PanoramaItem创建第二个视图模型。

如果我给PanoramaItems提供x:Name属性,我可以使用它,但我试图不这样做,因为MVVM不鼓励使用x:Name属性。我试过的替代方案虽然没有奏效。将整个全景图的DataContext设置为一个视图模型很容易,但是我没有第二个全景图所需的数据。如果我尝试将DataContext分配给该项Loaded事件处理程序中的每个PanoramaItem,我可以通过Loaded事件处理程序中的sender参数获取对PanoramaItem的引用,但是编译器会为第二个Loaded事件处理程序引发错误 - 显然你无法将Loaded事件分配给一个Panorama中的两个PanoramaItem。就此而言,我无法将任何事件分配给第二个PanoramaItem。

有人可以帮忙吗?

感谢, 安迪

1 个答案:

答案 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中命名你的控件。