2013-05-11 34 views
0

繼續我之前的問題「Updating/using a variable from another ViewModel」,我決定開始使用Caliburn Micro作爲框架。將視圖綁定到ViewModel,沒有「空」構造函數

根據本指南http://www.mindscapehq.com/blog/index.php/2012/02/01/caliburn-micro-part-4-the-event-aggregator/設置了Event Aggerator。

問題是,根據本指南,不應該有一個「空」的構造函數,它需要0個參數。

好,很好。

現在的問題是,我不知道如何將ViewModel綁定到視圖。 在切換到這個框架之前,我使用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); 
    } 
} 

這是 「主」 視圖模型。然而,我不能將它綁定到一個視圖,所以數據不會顯示......我甚至試圖設置一個假數據......這並不如你可能猜到的那麼好。

回答

1

Caliburn.Micro使用約定。因此,如果您在ViewModels文件夾中有ShellViewModel,它將在文件夾中查找ShellView。我建議看一下樣品和documentation。一個好的起點是安裝Caliburn.Micro.Start NuGet軟件包(它將引入Caliburn.Micro),然後編輯文檔中所述的App.xaml文件。

本質上,引導程序是一個應用程序資源,它會實例化,然後通過配置的IoC容器解析您的shell視圖模型,找到相應的shell視圖,執行綁定並使用Caliburn.Micro窗口顯示它經理。

您也不需要在視圖模型基類上實現INotifyPropertyChanged。 Caliburn.Micro包括一個PropertyChangedBase類型,和一個Screen類型和Conductor類型。

+0

另外值得注意的是INPC事件編組到'PropertyChangedBase'中的UI線程 - 這是一個微小但非常有用的功能 – Charleh 2013-05-13 00:25:03