2012-04-27 78 views
2

我必須在我的XAML文件中創建一個靜態資源。帶參數的靜態資源構造函數

<Window.Resources> 
    <vm:ViewModel x:Key="viewModel" /> 
</Window.Resources> 

我需要這個靜態資源爲我的組合框

ItemsSource="{Binding Source={StaticResource viewModel}, Path=GetItems, Mode=TwoWay}" 

的項目,但我怎麼可以給視圖模型(構造)的一類背後我的代碼實例?

+0

爲什麼你的ViewModel需要你的代碼在類後面的一個實例? – Mark 2012-04-27 10:52:39

回答

7

如果我正確理解這一點,那麼您違反了MVVM模式。 您絕對不應該將ComboBox中的項目提供給虛擬機。您應該提供VM中的項目並將其綁定到Combobox,並且您在訪問項目時沒有問題。

0

好了,你可以從代碼做到這一點,我的意思是一切從代碼,或者你可以 嘗試(取決於您的應用程序如何architcted),通過使用ObjectDataProvider

例如:

<ObjectDataProvider ObjectType="{x:Type ViewModel}" x:Key="viewModel"> 
     <ObjectDataProvider.ConstructorParameters> 
       <StaticResource ResourceKey="dataProvider"/> 
     </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider > 

在這種情況下,自然地,你傳遞給povoder的構造函數參數,必須是資源太。

+2

@downvoter:謹慎解釋? – Tigran 2012-04-27 10:58:09

2

據我所知,你想根據MVVM模式綁定你的視圖和viewmodel。

你不應該直接在你的視圖中引用你的視圖模型,否則你在它們之間有很強的耦合。據MVVM模式,你應該他們夫婦通過在DataContext

在後面的代碼(例如在文件App.xaml.cs),它看起來像

yourWindow.DataContext = yourViewModel 

然後在您的視圖模型你將有一個屬性命名GetItems

最後,在你的窗口,你的列表框綁定到GetItems

ItemsSource="{Binding GetItems, Mode=TwoWay}"