如何在 C# 中访问 HubView XAML 的子元素?
How to access child elements of HubView XAML in C#?
我刚刚从 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(参考:上面的代码)是可访问的。
我发现 Jerry 回答了类似的问题,这两个问题:
- How to accessing Elements in XAML DataTemplate Listview without interacting with it
- How do I access a control inside a XAML DataTemplate?
但是,我无法复制它们。我的 TileSelectorView 下没有要迭代的 Items 属性。
我做错了什么?我该如何解决这个问题?
您可以像这样对它们进行数据绑定:
我刚刚从 Windows Phone 8.1 Silverlight 迁移到 Windows Phone 应用商店。我有以下 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/
我 运行 从 windows Phone Silverlight 迁移到 Windows Phone RT 时遇到了同样的问题。您可以像其他人建议的那样通过数据绑定来解决这个问题,但有时您只想获得页面上的控件。我发现以下文章很有帮助..
Get the controls inside DataTemplate control
我刚刚从 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(参考:上面的代码)是可访问的。
我发现 Jerry 回答了类似的问题,这两个问题:
- How to accessing Elements in XAML DataTemplate Listview without interacting with it
- How do I access a control inside a XAML DataTemplate?
但是,我无法复制它们。我的 TileSelectorView 下没有要迭代的 Items 属性。
我做错了什么?我该如何解决这个问题?
您可以像这样对它们进行数据绑定:
我刚刚从 Windows Phone 8.1 Silverlight 迁移到 Windows Phone 应用商店。我有以下 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/
我 运行 从 windows Phone Silverlight 迁移到 Windows Phone RT 时遇到了同样的问题。您可以像其他人建议的那样通过数据绑定来解决这个问题,但有时您只想获得页面上的控件。我发现以下文章很有帮助..
Get the controls inside DataTemplate control