我有一個「打開」命令,用戶可以選擇一個文件。當選擇文件時(因此我得到的文件路徑爲string
),我從CompositionContainer
中獲得DataView
(具有NonShared
和CreationPolicy
屬性)的新實例,並將其顯示在特定區域中。我的DataView
通過DI獲得DataViewModel
。現在我的問題是如何將選定的文件路徑傳遞給新的(選擇文件後創建)ViewModel?如何將參數從parentViewModel傳遞給ViewModel?
我的第一種方法似乎很聰明,只要我只創建一個View
。但是因爲我創建了多個視圖(Tabs),所以下面的方法不起作用,因爲我不能一次構建相同的值。
if (fileDialog.ShowDialog() == true)
{
Container.ComposeExportedValue("FilePath", fileDialog.FileName);
IRegion contentRegion = regionManager.Regions[Regions.CONTENT];
contentRegion.Add(Container.GetExportedValue<IDataView>(), null, true);
}
[ImportingConstructor]
public DataViewModel(IRegionManager regionManager,
[Import("FilePath")] string filePath)
{ }
是否有任何其他方式注入/傳遞我的字符串參數到viewmodel?
那是什麼,我也想過,但後來我才當用戶選擇文件時View和ViewModel不存在的問題。它們是在用戶成功選擇文件時創建的。解決辦法是在用戶點擊「打開」時創建視圖及其ViewModel,如果他取消了filedialog,則銷燬View和ViewModel,但聽起來很尷尬。 – Basti
如果您真的關注MVVM,那麼您的應用程序中的每個屏幕(或部分)都會有相應的View和ViewModel。如果文件的打開在選擇文件後顯示一個新窗口,那麼這項工作將在「父級」ViewModel中完成,並且您不需要創建(或用MEF導入)此「子級」ViewModel,直到選擇該文件。 – jonathanpeppers
工作實際上是在「父」視圖模型中完成的,但必須顯示的數據(與所選文件相關)必須以新視圖顯示,並且無論哪種方式,我都需要傳遞a)文件信息或b)由於所選文件生成的數據到新視圖,否則視圖不知道要顯示的內容(爲了更好地理解,可以觀察記事本++中的打開文件過程是如何完成的。選擇一個文件,然後按確定,然後會顯示一個包含文件數據的新選項卡(該選項卡是我想要創建的視圖) – Basti