【问题标题】:Get grandparent-element in XAML在 XAML 中获取祖父元素
【发布时间】:2016-03-24 16:48:09
【问题描述】:

我有一个集线器元素,我想通过触摸/单击集线器部分来浏览这些元素。由于 HubSection-Elements 不可点击(只能通过“SectionHeaderClick”,它会产生一个相当难看的“查看更多”链接),我已将 GridView 设为可点击。

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

在我的 ViewModel 中,“点击”方法应该将框架导航到 page1

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

所以基本上我必须以 MVVM 样式访问框架元素。如何访问框架?

【问题讨论】:

    标签: c# xaml mvvm win-universal-app


    【解决方案1】:

    您可以在您的活动中使用 VisualTreeHelper 方法 GetParent()

    这里是链接GetParent

    var parent = VisualTreeHelper.GetParent(element);

    【讨论】:

    • 但问题是“getParent”会给我“DataTemplate”元素,我需要“frame”元素,它不是父元素。
    • 一遍又一遍地调用该方法,直到获得所需的元素
    • 你可以编写一个像这样的通用类型的递归函数 public GetParent(element){var parent =VisualTreeHelper.GetParent();if(parent is T){return parrnt}else{GetParent (父)}
    【解决方案2】:

    在 MVVM 模式中,您通常从视图模型层进行导航,您可以通过将导航服务接口中包装的框架传递到视图模型中,而无需从视图模型层访问视图层。那是如果您实际上是在使用 MVVM 模式来执行单元测试之类的事情。如果您不打算对导航进行单元测试 - 您通常可以在 App 类上公开一个指向您的框架的静态属性。

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      • 2016-04-25
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多