DataGrid 在页面上时不会分散新项



我有一个带有DataGrid的页面和一个向DataGrid中添加新Item的按钮。当我单击按钮项时,它不会显示,但通过调试器,我可以看到它被添加到了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 = "";
        }

我有一个点击事件处理程序,在那里我添加了一个新的项目

        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时,一切都正常工作。

可能是什么问题?

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

这太愚蠢了。

在CCD_ 2方法的第一行上,我创建CCD_;清除";此操作创建一个新的DataGrid,该CCD_5在内存中表示,但不在Page上。所以这就是为什么我没有看到任何变化。

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

最新更新