我试图将DataGrid的ItemSource设置为等于列表,然后显示该列表的内容。
我的XAML看起来像
<Window x:Class="DataGridDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataGridDemo"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="aGrid" ItemsSource= "{Binding actorList}" />
</Grid>
</Window>
我的MainWindow代码看起来像
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using A1;
namespace DataGridDemo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
List<Actor> actorList = new List<Actor>();
public MainWindow()
{
Actor a = new Actor("Jaba",32);
Actor b = new Actor("Java", 46);
Actor c = new Actor("Jaga", 23);
actorList.Add(a);
actorList.Add(b);
actorList.Add(c);
InitializeComponent();
aGrid.ItemsSource = actorList;
}
}
}
如果有关系的话,我的演员课看起来像
namespace A1
{
public class Actor
{
Random rand { get; set; }
String name { get; set; }
int age { get; set; }
public Actor()
{
name = "Blank Blankerson";
age = rand.Next(80) + 6;
}
public Actor(String n)
{
name = n;
age = rand.Next(80) + 6;
}
public Actor(String n, int a)
{
age = a;
name = n;
}
public override String ToString()
{
return name + "," + age.ToString();
}
}
我在互联网上找到的每个教程都说,您只需设置dataGrid.ItemSource = List。在我的两次尝试中,这仅产生了以下错误。令人沮丧的是,因为我正在关注这些教程,而这仍然是我的结果。
那么,如何使WPF DataGrid显示列表?
答案 0 :(得分:1)
DataGrid要求get和set方法是公共的。我相应地对此进行了更改。现在显示。
答案 1 :(得分:0)
除非您要为列定义自己的模板,否则需要设置 AutoGenerateColumns="True"
<DataGrid x:Name="aGrid" AutoGenerateColumns="True" ItemsSource= "{Binding actorList}" />
编辑
您应该为窗口设置数据上下文
InitializeComponent();
DataContext = this;
aGrid.ItemsSource = actorList;
actorList必须是数据上下文中的一个属性,即主窗口
此外,您还应该考虑在模型中实现INotifyPropertyChanged