Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#Windows UWP中向gridview添加数据_C#_.net_Windows_Uwp - Fatal编程技术网

如何在c#Windows UWP中向gridview添加数据

如何在c#Windows UWP中向gridview添加数据,c#,.net,windows,uwp,C#,.net,Windows,Uwp,我最近从C#开始,我遇到了以下问题:我有一个名为“Classe”的类,它为我提供了一个对象:Classe(字符串名称)和另一个名为lesclases的类,它实际上是一个可观察的集合。这样,我想在UI的GridView中添加所有“Classe”元素 主C#代码: 名称空间测试项目 { 公共密封部分类主页面:Windows.UI.Xaml.Controls.Page { 公共主页() { this.InitializeComponent(); LesClasses ListClasse=新的LesC

我最近从C#开始,我遇到了以下问题:我有一个名为“Classe”的类,它为我提供了一个对象:Classe(字符串名称)和另一个名为lesclases的类,它实际上是一个可观察的集合。这样,我想在UI的GridView中添加所有“Classe”元素

主C#代码:

名称空间测试项目
{
公共密封部分类主页面:Windows.UI.Xaml.Controls.Page
{
公共主页()
{
this.InitializeComponent();
LesClasses ListClasse=新的LesClasses();
类别maClasse=新类别(“测试”);
添加(maClasse);
}
私有无效cd_单击(对象发送者,路由目标e)
{
Classe Classe=新的Classe(“测试2”);
LesClasses ListClasse=新的LesClasses();
listclasse.Add(classe);
}
}
公共类
{
公共字符串Nom{get;set;}
公共类(字符串名称)
{
这个.Nom=Nom;
}
}
公共类LesClass:ObservableCollection
{
公共课()
{
}
}
公共类DataTemplate:FrameworkTemplate{}
}
以及XAML:

<Page
    x:Class="TestProject.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:src="using:TestProject"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>

        <Grid.Resources>
            <src:LesClasses x:Key="classes"/>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="3*"/>
            <RowDefinition Height="0.5*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <TextBlock Text="MyClassroom" Grid.Column="1" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="Segoe UI" FontWeight="SemiLight" FontSize="46"/>
        <GridView ItemsSource="{StaticResource classes}" Margin="10,10,10,10"  Grid.Column="1" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" FlowDirection="LeftToRight" Height="Auto" Width="Auto">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Button Margin="10,10,10,10" Height="Auto" Width="Auto" HorizontalAlignment="Center" VerticalAlignment="Center">
                        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal">
                            <SymbolIcon Symbol="OtherUser" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="10,10,10,10"/>
                            <StackPanel>
                                <TextBlock Text="{Binding Nom}" FontFamily="Segoe UI" FontWeight="SemiLight" FontSize="26"/>
                            </StackPanel>
                        </StackPanel>
                    </Button>
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid MaximumRowsOrColumns="3"/>
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>

            <GridView.GroupStyle>
                <GroupStyle HidesIfEmpty="True">
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <Grid Background="LightGray" Margin="0">
                                <TextBlock Text='{Binding Name}' 
                                   Foreground="Black" Margin="30"
                                   Style="{StaticResource HeaderTextBlockStyle}"/>
                            </Grid>
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>

                </GroupStyle>
            </GridView.GroupStyle>
        </GridView>
        <Button Name="cd" Click="cd_Click" Grid.Column="1" Grid.Row="2" Content="Ajouter la classe test2" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" FontFamily="Segoe UI" FontSize="18" FontWeight="SemiLight"/>
    </Grid>
</Page>


当我启动应用程序并点击按钮时,什么都没有发生。有人能帮我吗?

以最简单的方式,以下是您解决问题的方法,在您的代码中,您需要执行以下操作:

  • 为可观察集合添加属性:

    public LesClasses Classes { get; set; }
    
  • 初始化列表:

    Classes = new LesClasses();
    Classe maClasse = new Classe("Test");
    Classes.Add(maClasse);
    
  • 将MainPage.cs指定为您的DataContext

    DataContext = this;
    
  • 在您的事件中,您需要将Classe的新实例添加到observable集合属性中

    private void cd_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
    {
        Classe classe = new Classe("test2");
        Classes.Add(classe);
    }
    
  • 在xaml中,将ItemSource更改为绑定到集合属性:

    <GridView ItemsSource="{Binding Classes}"
    
    输出:


    继续学习C#和UWP/WPF。

    我不明白为什么你们都一直使用“binding”关键字并分配页面的数据上下文,而UWP中不再需要这些东西。。。
    <GridView ItemsSource="{Binding Classes}"
    
    public sealed partial class MainPage : Page
        {
            public MainPage()
            {
                this.InitializeComponent();
                Classes = new LesClasses();
                Classe maClasse = new Classe("Test");
                Classes.Add(maClasse);
                DataContext = this;
            }
    
            public LesClasses Classes { get; set; }
    
            private void cd_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                Classe classe = new Classe("test2");
                Classes.Add(classe);
            }
        }