我正在创建一个简单的WPF应用程序,用于使用Observable集合实现数据绑定到数据库的数据绑定(遵循MVVM模式)。
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);
}
}
答案 0 :(得分:1)
尝试在MainWindow的构造函数上进行绑定,并将其从XAML中删除:
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
这应该有用..
答案 1 :(得分:0)
您正在混合两种设置DataContext的方法。选择一个并继续使用。
如果你的viewmodel有默认的构造函数(即没有参数的构造函数),你可以在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">
<Window.DataContext>
<! This instantiates a MainViewModel and binds this view to the viewmodel.
<ViewModel:MainViewModel/>
</Window.DataContext>
或者你在视图中取消设置Window.DataContext并在其他地方单独执行,也许在之前的OnStartup()中。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var mainWindow = new MainWindow();
var viewModel = new MainViewModel();
mainWindow.DataContext = viewModel; // Bind the ViewModel to the Window Datacontext.
mainWindow.Show();
}
}