前回の質問「別の ViewModel から変数を更新/使用する」の続きとして、Caliburn Micro をフレームワークとして使い始めることにしました。
このガイドhttp://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/に従って Event Aggerator をセットアップしました。
問題は、このガイドによると、0 引数を取る「空の」コンストラクターがあってはならないということです。
まあ、いいです。
問題は、ViewModel を View にバインドする方法がわからないことです。このフレームワークに切り替える前に、App.xaml と静的リソースをデータ コンテキストとして使用していましたが、空のコンストラクターがないため、それ以上はできません。
この問題を解決するにはどうすればよいですか? 私はそれを1時間ほど解決しようとしてきましたが、まったく何も達成していません。
いくつかのコード:
[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);
}
}
それが「メイン」ビューモデルです。ただし、ビューにバインドできないため、データが表示されません... 偽のデータを設定しようとしましたが、ご想像のとおりうまく機能しませんでした。