我正在尝试从静态方法将一些数据加载到我的mainwindow-s数据网格中(添加列),我试图在不创建窗口的新实例的情况下实现此目的。我已经破解了一种解决静态限制的方法,但它失败并出现错误
public partial class MainWindow : MetroWindow
{
static MainWindow mainWindow;
public MainWindow()
{
InitializeComponent();
ArgumentLoader();
SqliteDatabase.check_for_database();
SqliteDatabase.load_database();
ColumnLoader("alias");
}
public static void ColumnLoader(string alias)
{
DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = "X";
textColumn.Binding = new Binding("X");
mainWindow.dataGrid.Columns.Add(textColumn);
}
例外
An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in PresentationFramework.dll
Additional information: Exception has been thrown by the target of an invocation.
如果我重命名
mainWindow.dataGrid.Columns.Add(textColumn);
到
dataGrid.Columns.Add(textColumn);
并使该方法非静态工作。我错过了什么或者有更好的方法吗?
答案 0 :(得分:1)
您需要将mainWindow
设置为对象实例。您可以在构造函数中执行此操作:
public MainWindow()
{
mainWindow = this;
InitializeComponent();
ArgumentLoader();
SqliteDatabase.check_for_database();
SqliteDatabase.load_database();
ColumnLoader("alias");
}