【发布时间】:2013-01-11 11:43:48
【问题描述】:
我正在创建一个简单的 WPF 应用程序,用于使用 Observable 集合(遵循 MVVM 模式)将 Datagrid 数据绑定到数据库。
App.xaml.cs 类
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var mainWindow = new MainWindow();
var viewModel = new MainViewModel();
mainWindow.Show();
}
}
当我尝试将其绑定到我的 XAML 时,出现以下错误:
无法创建“MainViewModel”的实例
XAML 代码:
<Window x:Class="MVVM_DemoAppl.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModel="clr-namespace:MVVM_DemoAppl.ViewModels"
Title="MainWindow" Height="350" Width="525">
<!-- The error is raised here -->
<Window.DataContext>
<ViewModel:MainViewModel/>
</Window.DataContext>
如何克服这个错误?谢谢。
P.S:我已经在MSDN forums 上发布了同样的问题,但是对于我的整个代码,请查看以获得更好的理解。
根据用户的建议,我是否必须以这种方式保留我的 OnStartup() ?
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
}
}
【问题讨论】:
-
你有堆栈跟踪吗?
-
您正在创建 MainViewModel 实例两次,一次是在 OnStartup() 中,一次是在您的 xaml 中定义 DataContext 时。
-
如果您在 OnStartup 中没有做任何特别的事情,则无需捕获该事件。
-
如果注释掉
MainViewModel constructor中的代码initializeload();,是否还会出现错误?我有一种感觉,当您创建模型/数据库/其他东西时会出现一些错误,而这并不是 WPF 中的错误。如果您在将其注释掉后没有收到错误,请尝试查明产生错误的代码行。如果您使用 Visual Studio 并遇到异常,您可以通过“查看详细信息”链接打开异常详细信息并检查内部异常。这应该会给你一些关于问题实际出在哪里的线索。 -
.. 例如,
Messages = table.Rows[i][3].ToString() Critical = Convert.ToBoolean(table.Rows[i][1]),行似乎在initializeload函数中放错了位置。虽然,这甚至不会编译。
标签: c# wpf wpfdatagrid