[英]Binding a View to a ViewModel, without an “empty” constructor
继续上一个问题“ 更新/使用另一个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和Static资源作为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);
}
}
这就是“主要”视图模型。 但是,我无法将其绑定到视图,因此数据不会显示...我什至试图设置一个伪造的数据...效果不佳,您可能已经猜到了。
Caliburn.Micro使用约定。 因此,如果ViewModels文件夹中有ShellViewModel
,它将在Views文件夹中寻找ShellView
。
我建议您看一下样本和文档 。 一个不错的起点是安装Caliburn.Micro.Start NuGet软件包(将其导入Caliburn.Micro),然后按照文档中的说明编辑App.xaml文件。
从本质上讲,引导程序是导致其实例化的应用程序资源,该资源随后通过配置的IoC容器解析您的外壳视图模型,找到相应的外壳视图,进行绑定并使用Caliburn.Micro窗口管理器显示它。
您也不需要在视图模型基类上实现INotifyPropertyChanged
。 Caliburn.Micro包括PropertyChangedBase
类型, Screen
类型和Conductor
类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.