1

我正在使用 Panorama WP7 项目,我无法将我的视图模型绑定到我的视图。因为我的视图是全景图,所以我想为第一个 PanoramaItem 设置一个视图模型,为第二个 PanoramaItem 设置第二个视图模型。

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

任何人都可以帮忙吗?

谢谢,安迪

4

1 回答 1

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

在此示例中,您必须知道您的 PanoramaItems 将是什么,它们不是动态的,但此方法可让您避免在 XAML 中对控件进行 x:Name 命名。

于 2012-06-07T01:28:53.813 回答