我正在尝试将一些数据绑定(bind)到 Windows 8.1 的 Hub
控件中的 GridView
。
目前,我在 Page.Resources
下设置了一个 DataTemplate
,如下所示:
<DataTemplate x:Key="Standard240x320ItemTemplateFAV">
<Grid HorizontalAlignment="Left" Width="320" Height="240">
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image Source="{Binding FavImage}" Stretch="UniformToFill"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}">
<TextBlock Text="{Binding FavTitle}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="48" Margin="15,0,15,0"/>
</StackPanel>
</Grid>
</DataTemplate>
然后我有这个 HubSection
:
<HubSection x:Name="FavHub" Padding="40,60,40,0" >
<DataTemplate>
<GridView
x:Name="itemGridView"
Margin="-4,-4,0,0"
AutomationProperties.AutomationId="ItemGridView"
AutomationProperties.Name="Items In Group"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource Standard240x320ItemTemplateFAV}"
SelectionMode="Single"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="ItemView_ItemClick">
</GridView>
</DataTemplate>
</HubSection>
我使用此代码添加 DataContext:
FavHub.DataContext = new FavData(Constants.getImage("1002"), "No Favourites");
FavData 类在哪里:
public class FavData
{
public static string FavImage { get; set; }
public static string FavTitle { get; set; }
public FavData() { }
public FavData(string itemImageSet, string itemNameSet)
{
FavImage = itemImageSet;
FavTitle = itemNameSet;
}
}
但是,HubSection 中没有显示任何数据。我做错了什么?
最佳答案
您需要绑定(bind)一个列表,例如 List<FavData>
或 ObservableCollection<FavData>
到中心。
现在,您有一个 GridView
在许多其他属性中,包括 ItemsSource
的初始化属性(property)。此属性用作项目列表的来源。
<GridView x:Name="itemGridView"
ItemsSource="{Binding Items}"
</GridView>
绑定(bind)指定为 {Binding Items}
这意味着对于当前绑定(bind)到集线器的任何对象,获取存储在 Items
上的列表属性(property)。因为你目前已经设置了一个 FavData
实例通过 DataContext
到集线器属性,它没有名为 Items
的属性, 没有什么可显示的。
因此,我的建议是创建一个列表 FavData
实例并将其绑定(bind)到 Hub 实例。如果您想直接绑定(bind)列表而不是将列表存储在另一个“父”对象中,您还需要调整 Binding
指的是“ self ”而不是特定的属性(property)。为此,您只需使用语法:{Binding}
.它只是意味着“绑定(bind)到我”。因此,GridView 将直接在绑定(bind)对象上查找项目列表(FavData
的列表)。
<GridView x:Name="itemGridView"
ItemsSource="{Binding}"
</GridView>
在 C# 中:
List<FavData> favs = new List<FavData>();
favs.Add(new FavData(Constants.getImage("1002"), "No Favourites"));
FavHub.DataContext = favs;
关于c# - GridView 中的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730593/