我最近从C#开始,我遇到了以下问题:我有一个名为"Classe“的类,它为我提供了一个对象: class (字符串名),另一个名为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>
当我启动应用程序,点击按钮,什么都不会发生。有人能帮我吗?
发布于 2019-10-01 01:07:00
以下是解决问题的最简单方法,在代码中,您需要执行以下操作:
公共LesClasses类{ get;set;}
Classe =新的LesClasses();Classe=新的类(“Test”);MainPage.cs作为您的DataContext
DataContext =this;在您的事件中,需要将Classe的新实例添加到可观察的集合属性中。
私有void cd_Click(对象发送方,Windows.UI.Xaml.RoutedEventArgs e) { Classe =新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。
https://stackoverflow.com/questions/58174782
复制相似问题