c# - GridView 中的数据绑定(bind)

标签 c# data-binding windows-runtime winrt-xaml windows-8.1

我正在尝试将一些数据绑定(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/

相关文章:

c# - 将多个控件数据绑定(bind)到单个 LINQ 查询

silverlight - 如何对两个 UI 元素进行数据绑定(bind),以便它们可以在 Silverlight 中立即相互更新?

mvvm - Prism.StoreApps中不存在Prism MVVM ValidatableBindableBase

c# - 在 Windows 应用商店应用程序中,如果我定期从 LocalFolder 中的文件夹读取数据,我可以保留静态引用吗?

c# - 如何使用工厂方法在 XAML 中实例化对象

c# - 在声明之前不能使用局部变量

c# - 防止 .NET 逆向工程/反编译

c# - Linq to Entities 查询无法执行

c# - 让客户端使用包含私钥的证书有什么区别?

c# - 将子属性绑定(bind)到 DataGridView