如何使WPF DataGrid不显示空白行

时间:2018-07-17 01:30:50

标签: c# wpf datagrid

我试图将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();
    }
}

每次运行代码,它都会生成3个空白行,像这样enter image description here

我在互联网上找到的每个教程都说,您只需设置dataGrid.ItemSource = List。在我的两次尝试中,这仅产生了以下错误。令人沮丧的是,因为我正在关注这些教程,而这仍然是我的结果。

那么,如何使WPF DataGrid显示列表?

2 个答案:

答案 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