如何在C#中访问HubView XAML的子元素?

时间:2015-03-16 14:22:47

标签: c# windows-phone windows-store-apps windows-phone-8.1 winrt-xaml

我刚从Windows Phone 8.1 Silverlight迁移到Windows Phone应用程序。我为应用页面添加了以下XAML:

<Page
    x:Class="WebClip.HubPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WebClip"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:data="using:WebClip.Data"
    mc:Ignorable="d">

    <Grid x:Name="LayoutRoot">
        <Hub x:Name="Hub"
             Header="web clip"
             Background="{ThemeResource HubBackgroundImageBrush}">

            <HubSection x:Name="TileSelectorView"
                        Header="TILE SELECTOR">
                <DataTemplate>
                    <ListView x:Name="TileList"/>
                </DataTemplate>
            </HubSection>

            <HubSection x:Name="BrowserView"
                        Header="BROWSER">
                <DataTemplate>
                    <WebView x:Name="BrowserBox"/>
                </DataTemplate>
            </HubSection>

        </Hub>
    </Grid>
</Page>

早些时候,在Silverlight中,我可以直接访问像TileList这样的元素来执行以下操作:

TileList.ItemsSource = <SomeItemSourceList>;

但现在我无法在后端C#代码中执行此操作。 TileList本身不可访问。但是,可以访问TileSelectorView和BrowserView(参见上面的代码)。

我发现这两个问题,杰里回答了类似的问题:

  1. How to accessing Elements in XAML DataTemplate Listview without interacting with it
  2. How do I access a control inside a XAML DataTemplate?
  3. 但是,我无法复制它们。我的TileSelectorView下没有Items属性可以迭代。

    我做错了什么?我怎么得到这个?

2 个答案:

答案 0 :(得分:1)

你可以像这样对它们进行数据绑定:

我刚刚从Windows Phone 8.1 Silverlight迁移到Windows Phone Store应用程序。我在应用页面上有以下XAML:

<HubSection x:Name="TileSelectorView"
            Header="TILE SELECTOR" 
            ItemsSource="{Binding SomeItemSourceList}">
  <DataTemplate>
    <ListView x:Name="TileList"/>
  </DataTemplate>
</HubSection>

这假设您正在使用MVVM模式,这是开发Windows Phone应用程序时的最佳实践

https://msdn.microsoft.com/en-us/library/windows/apps/jj883732.aspx

我个人更喜欢MVVM Light作为我的MVVM框架: http://blog.galasoft.ch/posts/2014/04/building-a-universal-application-for-windows-phone-8-1-and-windows-8-1-with-mvvm-light/

答案 1 :(得分:1)

从Windows Phone Silverlight迁移到Windows Phone RT时遇到了同样的问题。您可以像其他人建议的那样通过数据绑定解决此问题,但有时您只想获取页面上的控件。我发现以下文章非常有用..

Get the controls inside DataTemplate control