无法创建“mainviewmodel”的实例
本文关键字:实例 mainviewmodel 创建 | 更新日期: 2023-09-27 17:51:15
我正在创建一个简单的WPFapplication,用于使用Observable collection(遵循MVVM模式)实现数据网格到数据库的数据绑定。
App.xaml.cs class
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论坛上发布了同样的问题,但我的整个代码,请看看更好的理解。
根据用户的建议,我是否必须以这种方式保持我的OnStartup() ?
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
}
}
尝试在MainWindow的构造函数上绑定并将其从XAML:
中删除。public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
您正在混合设置DataContext的两种不同方式。选择一个,然后用它。
如果你的视图模型有默认构造函数(即没有参数的构造函数),你可以在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>
或者你离开窗口。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();
}
}