【问题标题】:How to add data to a gridview in c# Windows UWP如何在 c# Windows UWP 中将数据添加到网格视图
【发布时间】:2020-01-30 03:43:16
【问题描述】:

我最近开始使用 C#,但遇到以下问题:我有一个名为“Classe”的类,它为我提供了一个对象:Classe(String name) 和另一个名为 LesClasses 的对象,它实际上是一个 ObservableCollection。有了这个,我想在 UI 的 GridView 中添加所有“Classe”元素。

主要的C#代码:

namespace TestProject
{

    public sealed partial class MainPage : Windows.UI.Xaml.Controls.Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            LesClasses listeClasse = new LesClasses();
            Classe maClasse = new Classe("Test");
            listeClasse.Add(maClasse);
        }

        private void cd_Click(object sender, RoutedEventArgs e)
        {
            Classe classe = new Classe("test2");
            LesClasses listeClasse = new LesClasses();
            listeClasse.Add(classe);
        }
    }

    public class Classe
    {
        public String Nom { get; set; }

        public Classe(String nom)
        {
            this.Nom = nom;
        }
    }

    public class LesClasses : ObservableCollection<Classe>
    {
        public LesClasses()
        {

        }
    }

    public class 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>

当我启动应用程序并单击按钮时,没有任何反应。谁能帮帮我?

【问题讨论】:

    标签: c# .net windows uwp


    【解决方案1】:

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

    1. 为可观察集合添加一个属性:

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

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

      DataContext = this;
      
    4. 在您的事件中,您需要将新的 Classe 实例添加到您的可观察集合属性中。

      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}"
    

    您的 MainPage 类应如下所示:

    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);
            }
        }
    

    输出:

    继续学习 C# 和 UWP/WPF。

    【讨论】:

    • 我不明白为什么你们都继续使用“绑定”关键字并分配页面的数据上下文,而 UWP 中不再需要所有这些东西......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多