2010-06-07 26 views
2

我在尋找一些幫助,我希望那裏有一些善良的靈魂能夠給我一個提示:)如何在View中參數化導入?

我正在使用MVVM Light構建一個新的應用程序。在這個應用程序中,當創建一個View時,它通過使用MEF導入實例化對應的ViewModel。

下面是一些代碼:

public partial class ContractEditorView : Window 
{ 
    public ContractEditorView() 
    { 
     InitializeComponent(); 
     CompositionInitializer.SatisfyImports(this); 
    } 

    [Import(ViewModelTypes.ContractEditorViewModel)] 
    public object ViewModel 
    { 
     set 
     { 
      DataContext = value; 
     } 
    } 
} 

這裏是視圖模型導出:

[PartCreationPolicy(CreationPolicy.NonShared)] 
[Export(ViewModelTypes.ContractEditorViewModel)] 
public class ContractEditorViewModel: ViewModelBase 
{ 
    public ContractEditorViewModel() 
    { 
     _contract = new Models.Contract(); 
    } 
} 

現在,這個作品,如果我想,以創建一個新打開一個新窗口合同......換句話說,如果我不需要通過現有合同的身份證明,這是完美的。

但是,讓我們假設我想使用相同的視圖來編輯現有合同。在這種情況下,我會添加一個新的構造函數到相同的視圖,該視圖接受模型ID或模型對象。

「不幸的是」視圖模型總是以同樣的方式創建:

[Import(ViewModelTypes.ContractEditorViewModel)] 
    public object ViewModel 
    { 
     set 
     { 
      DataContext = value; 
     } 
    } 

據我所知,這個調用標準/無參數對應的視圖模型的構造在組成時。

所以我想知道的是如何區分這種行爲?我如何在組合時間調用特定的構造函數?或者如何在導入期間傳遞一些參數?

我真的很抱歉,如果這個問題聽起來很愚蠢,但我最近纔開始使用MEF!

由於提前,

乾杯, 贊布羅塔。

回答

0

你可以這樣做。查看MVVM-Light中的Messenger實現。您可以傳遞NotificationMessage(Of Integer)以將正確的ID發送到視圖模型。視圖模型必須註冊該類型的消息,並在發送消息時加載它。

默認情況下,MEF默認只有一個無參數的構造函數。