我已經使用MEF加載外部XAP,這很好。 但是,當我從帶有加載控件的頁面導航離開時,然後回到它,控件處於我離開它的確切狀態。重置使用MEF加載的控件
現在有時候這很棒,但不適合我工作的項目。
如何將控件重置爲初始狀態?
控制被加載(successfuly)插入此處:
<ItemsControl x:Name="content"/>
這是XAML標記
我有一個在NavigatedFrom方法:
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
content.Items.Clear();
}
這successfuly除去控制,就像之前添加的那樣,當我回到頁面時,它崩潰告訴我,控制已經是一個元素的孩子。
這裏是全網頁代碼:
public partial class Wizard : IPartImportsSatisfiedNotification
{
public Wizard()
{
InitializeComponent();
CompositionInitializer.SatisfyImports(this);
var controlToLoad = IsolatedStorageHelper.GetValue("control");
if (!String.IsNullOrEmpty(controlToLoad))
{
CatalogService.AddXap(controlToLoad + ".xap");
}
else
{
NavigationService.Navigate(new Uri("/ServiceSelector", UriKind.Relative));
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
content.Items.Clear();
}
[Import]
public IDeploymentCatalogService CatalogService { get; set; }
[ImportMany(AllowRecomposition = true)]
public Lazy<UserControl>[] MefModuleList { get; set; }
#region IPartImportsSatisfiedNotification Members
public void OnImportsSatisfied()
{
MefModuleList.ToList()
.ForEach(module =>
content.Items.Add(module.Value)
);
}
#endregion
}
任何人任何想法?
感謝,
你是否有這樣的例子,因爲我遵循上面的toturoial,並沒有很多機會閱讀MEF呢:( – JamesStuddart 2010-11-11 09:31:53
ExportFactory模板的使用方式與Lazy完全相同。相同的參數:無論是導入的類型或導入的類型,然後是元數據類型爲了得到實例,而不是使用module.Value,你需要獲取module.CreateExport()。ExportFactory .CreateExport()返回ExportLifetimeContext ,它管理有問題的對象的生命週期。實際的T實例在它的Value屬性中。 –
2010-11-11 18:28:22