【发布时间】: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的子节点 -
请发布您的代码,包括所有这些。