2013-10-15 267 views
4

我在WPF類在XAML中引用的視圖控件:靜態資源在WPF

<ctrl:MyController x:Key="Controller"/> 

我現在可以訪問這個作爲一個靜態資源所有的罰款:

Command="{Binding Source={StaticResource Controller}, Path=HistoryFutureRetrieveLeft, 
Mode=OneTime}"> 

但是我現在需要使用IOC容器來創建控制器。我可以用下面的代碼做到這一點:

Resources.Add("Controller", App.IocContainer.Resolve<MyController>()); 

但我不得不刪除從XAML行,:

<ctrl:MyController x:Key="Controller"/> 

這是在運行時不存在問題,但這樣做會導致問題當試圖編輯XAML時,因爲所有綁定現在都說「找不到資源控制器」。有什麼辦法可以允許IOC容器在運行時創建控制器,但是純粹爲VS設計器定義XAML文件中的控制器?

+0

當您在設計器中工作時,在XAML中保留'Controller'聲明,並在運行時將其註釋掉? – Sheridan

回答

0

您可以將靜態定義的控制器保留在XAML中以滿足設計師的要求,並在運行時將其替換爲容器中的適當控制器。

更新: 您可以使用DataContext而不是修改資源嗎?

this.DataContext = App.IocContainer.Resolve<MyController>() 

然後你可以在XAML(d:DataContext的)指定的數據上下文類型,使設計師快樂,並有智能感知。

+0

如果我嘗試這樣做,它會抱怨控制器沒有公共無參數構造函數。 –

+0

我已經用另一個解決方案更新了我的答案。 –