0

继续我之前的问题“更新/使用来自另一个 ViewModel 的变量”,我决定开始使用 Caliburn Micro 作为框架。

我根据本指南http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/设置了事件聚合器。

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

好吧,好吧。

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

我该如何解决这个问题?我一直在尝试解决它一个小时,但我一无所获。

一些代码:

[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);
    }
}

那是“主要”视图模型。但是,我无法将其绑定到视图,因此数据不会显示...我什至尝试设置假数据...效果不如您可能猜到的那么好。

4

1 回答 1

1

Caliburn.Micro 使用约定。因此,如果您ShellViewModelViewModels文件夹中有 a,它将ShellViewViews文件夹中查找 a。

我建议您查看示例和文档。一个好的起点是安装Caliburn.Micro.Start NuGet 包(它会引入 Caliburn.Micro),然后按照文档中的说明编辑App.xaml文件。

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

您也不需要INotifyPropertyChanged在视图模型基类上实现。Caliburn.Micro 包括一个PropertyChangedBase类型、一个Screen类型和一个Conductor类型。

于 2013-05-11T21:46:01.653 回答