1

パノラマWP7プロジェクトを使用していますが、ビューモデルをビューにバインドするのに問題があります。私のビューはパノラマなので、最初のPanoramaItem用に1つのビューモデルを作成し、2番目のPanoramaItem用に2番目のビューモデルを作成します。

パノラマアイテムにx:Nameプロパティを指定すると、これを機能させることができますが、MVVMではx:Nameプロパティの使用を推奨していないため、これを実行しないようにしています。しかし、私が試した代替案はうまくいきませんでした。パノラマ全体のDataContextを1つのビューモデルに設定するのは簡単ですが、2番目のパノラマに必要なデータがありません。そのアイテムのLoadedイベントハンドラーの各PanoramaItemにDataContextを割り当てようとすると、Loadedイベントハンドラーのsenderパラメーターを介してPanoramaItemへの参照を取得できますが、コンパイラーは2番目のLoadedイベントハンドラーのエラーをスローします。 Loadedイベントを1つのPanorama内の2つのPanoramaItemに割り当てることはできません。ちなみに、2番目のPanoramaItemにイベントを割り当てることはできません。

誰か助けてもらえますか?

ありがとう、アンディ

4

1 に答える 1

1

わかりました。次のように、パノラマの Loaded イベントで送信者オブジェクトを使用して、パノラマの PanoramaItems に 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;
    }

この例では、PanoramaItems がどうなるかを知る必要があります。それらは動的ではありませんが、この方法により、XAML でコントロールを x:Name することを控えることができます。

于 2012-06-07T01:28:53.813 に答える