2016-03-24 9 views
-1

私はハブ要素を持っており、この要素をハブセクションのタッチ/クリックで移動したいと考えています。 HubSection-Elementsはクリック可能ではないので(「SeeHeererClick」、これはむしろ「もっと見る」リンクを生成する)、私はGridViewをクリック可能にしました。私のViewModelでXAMLで祖父母要素を取得

<Frame x:Name="frame"> 
    <Hub VerticalAlignment="Center" HorizontalAlignment="Center" > 
    <HubSection Width="250" x:Name="section1" IsHeaderInteractive="True" > 
        <DataTemplate> 
         <GridView IsItemClickEnabled="True" ItemClick="{x:Bind MainPageVM.click}"> 
          <RelativePanel> 
           <Image x:Name="image" Source="Assets/1.png" Width="Auto" Height="250" /> 
           <TextBlock x:Name="page1" Text="page1" /> 
          </RelativePanel> 
         </GridView> 
        </DataTemplate> 
       </HubSection> 

       //.... 
     </Hub>    
</Frame> 

-methodだから基本的に私はMVVMスタイルにフレーム要素にアクセスする必要が

public void hubClick(object sender, ItemClickEventArgs e) 
{ 
    GridView gridview = sender as GridView; 
    // "GrandGrandParent" equivalent ? 
    Frame frame = gridview.GrandGrandParent; 
    frame.Navigate(typeof(View.page1));   
} 

のPage1にフレームを移動しなければならない「クリック」。フレームにアクセスするにはどうしたらいいですか?

答えて

0

あなたはVisualTreeHelperメソッドGetParent関数を(使用することができます)あなたのイベントに

ここでは、リンクGetParent

するvar親= VisualTreeHelper.GetParent(要素)です。

+0

しかし、問題は "getParent"が私に "DataTemplate"要素を与えることです、私は親ではない "frame"要素が必要です。 – inix42

+0

目的の要素が得られるまで、このメソッドを何度も呼び出す – Archana

+0

publicのようなジェネリック型で再帰関数を書くことができます GetParent(要素){var parent = VisualTreeHelper.GetParent(); if(parentがT){return parrnt } else {GetParent (親)} – Archana

0

MVVMパターンでは、ナビゲーションサービスインターフェイスでラップされたフレームをビューモデルに渡すことによって、ビューモデルレイヤーからビューレイヤーにアクセスせずに実行できるビューモデルレイヤーから通常ナビゲートします。実際にMVVMパターンを使用して単体テストなどの作業を行う場合です。単体テストナビゲーションを計画していない場合は、通常、Appクラスのフレームを指す静的プロパティを公開することができます。

関連する問題