我有幾個MenuItems的命令綁定到我的ViewModel。直到今天,所有這些都正確執行。數據綁定到動態加載插件的功能
現在我添加了一個MenuItem,其ItemsSource綁定到ObservableCollection。這個MenuItem的目的是枚舉一個插件列表,以便顯示所有插件的名稱。然後當用戶點擊一個插件名稱時,它應該調用一個函數來顯示音頻過濾器的屬性。
在我目前的執行,這是不行的,我想數據綁定這樣的:
<MenuItem Header="Filters" ItemsSource="{Binding FilterPluginNames}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Command" Value="{Binding ShowFilterDialogCommand}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
的問題是,我得到一個BindingExpression路徑錯誤,因爲它試圖用一個字符串作爲菜單項的DataContext的。
這使我相信MenuItem的MenuItems的DataContext被自動設置爲ItemsSource中的對象類型。這是真的?
如果我需要更改DataContext,那麼我想將其更改爲處理所有其他命令的ViewModel。但是如果我這樣做了,我怎麼能夠知道我想要顯示哪些插件的過濾器屬性?我至少需要傳入CommandParameter,但將此值綁定到過濾器名稱並不是我最喜歡的選項。有沒有其他方法可以做到這一點?
如果DataContext確實自動設置爲ObservableCollection中的對象類型,那麼我寧願直接調用我的接口方法ShowFilterProperties()。我敢打賭,如果沒有命令綁定,我無法做到這一點。如果是這樣的話,你們如何處理這種應用?你是否讓所有的插件暴露了一個命令處理程序,然後將顯示對話框?
編輯 - 我修改代碼來改變的ObservableCollection類型,果然,WPF想要所以我想一個選擇是有插件暴露ICommand的數據綁定到類型T,但我不」不知道這是不是一個奇怪的方法?
編輯 - 好的,我剛學到了一些新東西。接口不能有字段,那麼是不是可以使用插件進行數據綁定?
他們不能有字段,但他們可以有屬性;-)。另外,插件並不是一個明確定義的術語。如果你認爲這很重要,你能解釋一下你的意思嗎? – 2010-01-27 17:50:21