【问题标题】:DataGrid does not displaly new items when it's on PageDataGrid 在页面上时不显示新项目
【发布时间】:2021-04-28 23:44:34
【问题描述】:

我有一个带有 DataGrid 的页面和一个将新项目添加到 DataGrid 中的按钮。当我单击按钮项时不显示,但通过调试器我可以看到它已添加到 DataGrid 中。

我尝试将页面的 XAML 和 CodeBehind 复制到新窗口中,它开始工作,但我需要它在页面内工作。


我有一个页面的构造函数,我在其中定义了 dataGrid 列和 ClearPage() 方法,该方法在取消隐藏时清除页面:

        public CreateTablePage()
        {
            InitializeComponent();

            var columnPK = new DataGridCheckBoxColumn();
            columnPK.Header = "PK";
            columnPK.Binding = new Binding("PK");
            dgMain.Columns.Add(columnPK);

            var columnName = new DataGridTextColumn();
            columnName.Header = "Name";
            columnName.Binding = new Binding("Name");
            dgMain.Columns.Add(columnName);

            var columnType = new DataGridTextColumn();
            columnType.Header = "Тип";
            columnType.Binding = new Binding("Type");
            dgMain.Columns.Add(columnType);

            var columnUQ = new DataGridCheckBoxColumn();
            columnUQ.Header = "UQ";
            columnUQ.Binding = new Binding("UQ");
            dgMain.Columns.Add(columnUQ);

            var columnNN = new DataGridCheckBoxColumn();
            columnNN.Header = "NN";
            columnNN.Binding = new Binding("NN");
            dgMain.Columns.Add(columnNN);

        }

        public void ClearPage()
        {
            dgMain = new DataGrid();
            tbColumnName.Text = "";
            tbFKName.Text = "";
        }

我有一个 Click 事件处理程序,我在其中添加了一个新项目

        private void bAddColumn_Click(object sender, RoutedEventArgs e)
        {
            AddColumn();
        }

        private void AddColumn()
        {
            var data = new DbTableItem { PK = true, Name = "Test", Type = "Int", UQ = false, NN = false };
            dgMain.Items.Add(data);
            //debuger shows that Items was added, but nothing is displayed on datagrid
            //when I run this code inside the Window it does work
        }

        public sealed class DbTableItem
        {
            public bool PK { get; set; }
            public string Name { get; set; }
            public string Type { get; set; }
            public bool UQ { get; set; }
            public bool NN { get; set; }

        }

Window 和 Page 的 XAML 和 CodeBehind 是相同的,我只是更改了构造函数名称,但是当它是 Page 时,DataGrid 中不会显示一个新项目,而当它是 Window 时,一切正常。

可能是什么问题?

【问题讨论】:

  • 如何在窗口中显示Page本身?
  • Page 托管在 Frame 中,它是 MainWindow 内 Grid 的子节点
  • 请发布您的代码,包括所有这些。

标签: c# wpf datagrid


【解决方案1】:

正确的方法是使用数据网格的 ItemSource 属性并将其绑定到 ObservableCollection。这样在执行添加按钮时,只需将新对象添加到 ObservableCollection 中即可。

【讨论】:

    【解决方案2】:

    嗯,这太愚蠢了。

    ClearPage() 方法的第一行,我创建了一个DataGrid 的新实例并将其分配给dgMain 以“清除”它。此操作创建一个新的DataGrid,它在内存中表示,但不在Page 上。所以这就是为什么我看不到它有任何变化。

    正确的清除方法是调用dgMain.Items.Clear()方法。

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 2012-09-21
      • 2018-01-07
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      相关资源
      最近更新 更多