我有几个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