Warm tip: This article is reproduced from serverfault.com, please click

uwp xaml-如何在UWP中将Gridview与Dictionary绑定?

(uwp xaml - How to bind Gridview with Dictionary in UWP?)

发布于 2020-12-21 07:19:52

我想使用Dictionary将数据绑定到xaml,我的意思是使用Dictionary重复文本框和gridview元素。我想随着时间的推移将其分组,请帮助我!

你可以看到图片:

在此处输入图片说明

代码Xaml

<Page.Resources>
    <local:CustomDataObject x:Key="customData"/>
</Page.Resources>
<StackPanel VerticalAlignment="Top">
    <TextBlock Margin="10" FontSize="50">4月2020</TextBlock>
    <GridView SelectionMode="Single" ItemsSource="{StaticResource customData}" Margin="10">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding ImageLocation}" Height="180" Width="180" Stretch="UniformToFill"/>
            </DataTemplate>
        </GridView.ItemTemplate>
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid  Orientation="Horizontal"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
    </GridView>
</StackPanel>

代码C#

public class CustomDataObject : List<ImageData>
{

    public CustomDataObject()
    {
        for (int i = 0; i < 10; i++)
        {
            this.Add(new ImageData()
            {
                Title = "Title",
                ImageLocation = "Assets/math.jpg",
                Views = "Views",
                Likes = "Likes",
                Description = "Description"
            });
        }
    }
    public class ImageData
    {
        public string Title { get; set; }
        public string ImageLocation { get; set; }
        public string Views { get; set; }
        public string Likes { get; set; }
        public string Description { get; set; }
    }

}
Questioner
dungtran
Viewed
0
Nico Zhu - MSFT 2020-12-21 16:51:57

如何在UWP中将Gridview与Dictionary绑定?

对于你的Dictionary键值对,你需要像下面这样GridView嵌套GridView并使用CollectionViewSource将DataSourcewith分组

Xaml

<Grid.Resources>
    <CollectionViewSource x:Key="cvs" x:Name="cvs" />
</Grid.Resources>
<GridView
    x:Name="MyListView"
    IsItemClickEnabled="False"
    ItemsSource="{Binding Source={StaticResource cvs}}">
    <GridView.ItemTemplate>
        <DataTemplate>
            <GridView ItemsSource="{Binding Value}">
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <Image
                            Width="100"
                            Height="100"
                            Source="{Binding}" />
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>
        </DataTemplate>
    </GridView.ItemTemplate>
    <GridView.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Key}" />
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </GridView.GroupStyle>
</GridView>

代码

private void MessagePage_Loaded(object sender, RoutedEventArgs e)
{
    var list = new List<string>() { "ms-appx:///Assets/img.png",
        "ms-appx:///Assets/img.png" ,
        "ms-appx:///Assets/img.png" ,
        "ms-appx:///Assets/img.png" };

    var items = new Dictionary<string, List<string>>() { { "Hello", list }, { "Some", list }, { "To", list } };   
    var groups = from c in items
                 group c by c.Key;

    this.cvs.Source = groups;
    this.cvs.IsSourceGrouped = true;
}