2010-08-05 49 views
4

我有一個Workflow 4活動,可以在任何數量的類上繼承我的基類。所以,這個活動自然就是通用的。與ForEach或AddToCollection活動類似,我的活動需要一個類型參數。可以在XAML中聲明WF4通用活動嗎?

我的問題是:我可以使用XAML在設計器中創建此活動嗎?請記住這是一個複合活動,所以設計師似乎是最好的選擇。

如果我在代碼來創建它,它應該是這樣的:

public class MyGenericActivity<T> : Activity where T : MyBaseClass 
{ 
    //args would go here 
    public MyGenericActivity() 
    { 
     this.Implementation =() => new Sequence 
     { 
     Activities = { //... } 
     }; 
    } 
} 

雖然這種解決方案會工作,維護將肯定是痛苦的,你沒有得到任何的「細微」的這樣的設計師。

+0

不幸的是,我還沒有找到一個好辦法來做到這一點。所以,我不得不重構一些活動(包括這個複合活動),因此他們需要一個InArgument 並且類的實例作爲System.Object傳遞。這在我的嘴裏留下了一個非常糟糕的口味,但這是我能想出的唯一方法,它可以讓我們避免使用20到30個xaml工作流程來完成同樣的任務。 感謝您的輸入。 – 2010-08-10 15:38:20

回答

1

XAML堆棧可能支持它(不確定),但在VS 10中,工作流設計者絕對不會讓你這樣做。

0

不知道你是否可以,但我懷疑不是。但即使你可以爲什麼會這樣? xaml活動只是標記和組合,沒有代碼,所以如何使用泛型類型。

使用您的活動的人的設計時間體驗與您創建活動的方式無關。只需添加一名設計師,併爲用戶提供任何您喜歡的設計時間體驗。您可以讓他們使用WorkflowItemsPresenter添加多個子活動。

+0

我沒有找到任何證據證明我可以做到這一點。 至於你的問題,「...你將如何使用泛型類型」我會將該類型傳遞到其中的其他活動。你看,我們有很多已經寫好的活動(主要是CodeActivity),它們都帶有一個類型參數。如果我不必在我的xaml中指定類型,但可以對所有類型重新使用相同的xaml,那將會很好。 這樣,我的工作流主機可以決定使用哪種類型,我不必爲每種類型重新設計相同的xaml。此外,手頭的問題不是設計時的體驗。它是代碼重用。 – 2010-08-09 13:40:30

+0

有道理,但恐怕我不知道有什麼辦法可以做到這一點。 – Maurice 2010-08-09 19:16:11

相關問題