C# 将视图绑定到ViewModel,但不带“";“空的”;建造师

C# 将视图绑定到ViewModel,但不带“";“空的”;建造师,c#,wpf,mvvm,caliburn.micro,C#,Wpf,Mvvm,Caliburn.micro,在继续我之前的问题“”时,我决定开始使用Caliburn Micro作为框架 我根据本指南设置了事件聚合器 问题是,根据本指南,不应该有一个接受0个参数的“空”构造函数 好吧,很好 现在的问题是,我现在不知道如何将ViewModel绑定到视图。 在切换到这个框架之前,我使用App.xaml和静态资源作为datacontext,但我不能再这样做了,因为没有空的构造函数 我如何解决这个问题?我已经试着解决这个问题一个小时了,但我什么也没得到 一些代码: [Export(typeof(ViewMode

在继续我之前的问题“”时,我决定开始使用Caliburn Micro作为框架

我根据本指南设置了事件聚合器

问题是,根据本指南,不应该有一个接受0个参数的“空”构造函数

好吧,很好

现在的问题是,我现在不知道如何将ViewModel绑定到视图。 在切换到这个框架之前,我使用App.xaml和静态资源作为datacontext,但我不能再这样做了,因为没有空的构造函数

我如何解决这个问题?我已经试着解决这个问题一个小时了,但我什么也没得到

一些代码:

[Export(typeof(ViewModelBase))]
public class ViewModelBase : INotifyPropertyChanged, IHandle<updateEvent>
{
    private Class _studclass;
    public AddStudentViewModel NewModel { get; private set; }

    public Class StudentClass
    {
        get { return _studclass; }
        set
        {
            _studclass = value;
            NotifyPropertyChanged("StudentClass");
        }
    }

    [ImportingConstructor]
    public ViewModelBase(AddStudentViewModel newModel, IEventAggregator events)
    {
        StudentClass = new Class();
        NewModel = newModel;
        Student asaf = new Student();
        asaf.Name = "Asaf";
        StudentClass.StudentList.Add(asaf);
        events.Subscribe(this);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void NotifyPropertyChanged(string PropertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
        }
    }

    public void Handle(updateEvent msg)
    {
        StudentClass.StudentList.Add(msg.Student);
    }
}
[导出(typeof(ViewModelBase))]
公共类ViewModelBase:INotifyPropertyChanged,IHandle
{
私人班(学生班),;
public AddStudentViewModel NewModel{get;private set;}
公共课学生课
{
获取{return\u studclass;}
设置
{
_等级=价值;
NotifyPropertyChanged(“StudentClass”);
}
}
[导入构造函数]
公共视图模型库(添加StudentViewModel新模型、IEventAggregator事件)
{
StudentClass=新类();
NewModel=NewModel;
学生asaf=新学生();
asaf.Name=“asaf”;
StudentClass.StudentList.Add(asaf);
活动。订阅(本);
}
公共事件属性更改事件处理程序属性更改;
受保护的void NotifyPropertyChanged(字符串PropertyName)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(PropertyName));
}
}
公共无效句柄(updateEvent消息)
{
StudentClass.StudentList.Add(msg.Student);
}
}

这是“主”视图模型。但是,我无法将其绑定到视图,因此数据不会显示。。。我甚至试图建立一个伪造的数据。。。这并没有你想象的那么好。

Caliburn.Micro使用约定。因此,如果在ViewModels文件夹中有一个
ShellViewModel
,它将在Views文件夹中查找
ShellView

我建议您看看样品和样品。一个好的起点是安装Caliburn.Micro.Start NuGet包(它拉入Caliburn.Micro),然后按照文档中的描述编辑App.xaml文件

从本质上说,引导程序是一种应用程序资源,它使它被实例化,然后通过配置的IoC容器解析您的外壳视图模型,找到相应的外壳视图,进行绑定,并使用Caliburn.Micro窗口管理器显示它


您也不需要在视图模型基类上实现
INotifyPropertyChanged
。Caliburn.Micro包括
属性更改数据库
类型、
屏幕
类型和
导体
类型

还值得注意的是,INPC事件被编组到
PropertyChangedBase
中的UI线程,这是一个很小但非常有用的功能