2012-10-01 35 views
0

我想將新的引用導入到我的工作流設計器中,但是我遇到了一個奇怪的問題。Workflow Foundation 4導入面板不刷新

這裏是我的代碼導入參考。

var root = GetRootElement(); 
VisualBasicSettings vbs = VisualBasic.GetSettings(root); 
vbs.ImportReferences.Add(new VisualBasicImportReference { Assembly = Assembly.Load("Castle.Core").FullName, Import = "Castle.Core.Configuration.Xml" }); 

private object GetRootElement() 
{ 
    var modelservice = workflowDesigner.Context.Services.GetService<ModelService>(); 
    if (modelservice == null) 
     return null; 
    var rootmodel = modelservice.Root.GetCurrentValue(); 
    return rootmodel; 
} 

當我載入我的設計師,第一次它的工作原理,大會清楚地加入到HashSet的ImportReferences話,我也看到了命名空間中的「進口」面板。但是當我通過選擇器對話框調用上述方法時,我稱之爲上面的代碼,程序集也很好地添加到ImportReferences中,但「Imports」面板未刷新...

任何創意?

感謝您的幫助。

回答

0

你試過DesignerView.OnReferenceUpdated?看來你在找什麼:

如果添加引用的組件,該類型的命名空間中發現 在裝配添加到導入的命名空間的列表。如果移除引用的程序集 ,則會從導入的名稱空間列表中刪除程序集中 中找到的類型的名稱空間。

用例:

var designerView = workflowDesigner.Context.Services.GetService<DesignerView>(); 
designerView.OnReferenceUpdated(assemblyName, true/false); 
+0

這看起來完全是我正在尋找的東西,但它不起作用。我在我的代碼之後添加了你的例子: var root = GetRootElement(); VisualBasicSettings vbs = VisualBasic.GetSettings(root); (新的VisualBasicImportReference {Assembly = Assembly.Load(「Castle.Core」)。FullName,Import =「Castle.Core.Configuration.Xml」}); var designerView = workflowDesigner.Context.Services.GetService < DesignerView>(); designerView.OnReferenceUpdated(Assembly.Load(「Castle.Core」)。FullName,true); – Gui

+0

順便說一句,你知道添加這樣的程序集有什麼區別: VisualBasicSettings vbs = VisualBasic.GetSettings(root); vbs.ImportReferences.Add(...) 等等: AssemblyContextControlItem acci = this.WorkflowDesigner.Context.Items.GetValue (); acci.ReferencedAssemblyNames.Add(...) – Gui

+0

對不起,我幫不了你。你有沒有試過在* acci.ReferencedAssemblyNames.Add *之後調用* OnReferenceUpdated *?他們似乎相輔相成。 – Joao