我有一个Hub-Element,我想通过触摸/点击中心部分来浏览这些元素。由于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中,“click”-method应该将框架导航到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风格访问frame元素。我该如何访问框架?
答案 0 :(得分:0)
您可以在事件中使用VisualTreeHelper方法GetParent()
这是链接GetParent
var parent = VisualTreeHelper.GetParent(element);
答案 1 :(得分:0)
在MVVM模式中,您通常从视图模型层导航,您可以通过将包含在导航服务界面中的框架传递到视图模型中,而无需从视图模型层访问视图层。如果您实际上正在使用MVVM模式来执行单元测试等操作,那就是这样。如果您不打算单元测试导航 - 您通常可以在App类上公开指向您的框架的静态属性。