2012-01-27 66 views
0

IM在ShowDialog的是如何工作的在WPF卸載對話框

Im做這個

NewReportDialog nrDialog = new NewReportDialog(); 
nrDialog.DataContext = ServiceLocator.Current.GetInstance<INewReportViewModel>(); 
nrDialog.WindowStartupLocation = WindowStartupLocation.CenterScreen; 
nrDialog.Owner = Application.Current.MainWindow; 
bool? dialogResult = nrDialog.ShowDialog(); 


    if (dialogResult.HasValue && dialogResult.Value) 
    { 
    Console.WriteLine(((INewReportViewModel)nrDialog.DataContext).ReportName); 
    Console.WriteLine(((INewReportViewModel)nrDialog.DataContext).SelectedSite); 
    } 

令我百思不解的是,我仍然可以讀取的DataContext對話框關閉後,有點不確定。我如何確保對話框被卸載或者我必須依賴垃圾回收器

回答

1

DataContext是一個任意的對象。在你的情況下,通過調用ServiceLocator.Current.GetInstance()解決任何問題。當屏幕上的對話框關閉時,代表其DataContext的對象仍處於您所顯示代碼的範圍內。

這是有用的,因爲它可以讓你到對話框中做一些事情,然後,在其終止,提取一些數據,這是「設置」對話框(內就像你正在與REPORTNAME做SelectedSite屬性)。

一旦持有參考INewReportViewModel超出範圍(退出在其中創建對話框的方法,例如)的對話框,你可以認爲它是「水漲船高」,而GC將處理它。

+0

感謝這兩個,不知道我錯過了 – klashagelqvist 2012-01-27 17:13:00

0

對話框不會從內存中移除,因爲您有對其的引用,因此垃圾回收器不會將其刪除。

完成它之後,您可以將空值賦給nrDialog,但仍然依賴垃圾回收器。