在 ItemsControl 中查看注入 [英] View Injection inside ItemsControl
问题描述
在我的应用程序中,我正在处理一个 ItemControl
.此 itemControl 接收一个 ObservableCollection.
In my application, I'm dealing with an ItemControl
. This itemControl receives an ObservableCollection.
如上所示,BaseItemViewModel 是一个抽象类.当我的应用程序启动时,moduleCatalog
通过发现加载模块.
As you can see above, BaseItemViewModel is an abstract class. And when my application is launching, moduleCatalog
loads the modules by discovery.
每个模块都有一个继承自 BaseItemViewModel 的类
Each module has a class inherited from BaseItemViewModel
所以我不能像这样在 ItemsControl 中设置 dataTemplates:
So I can't set the dataTemplates in ItemsControl like this:
<DataTemplate>
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate>
<View:AdvancedSettingsView/>
</DataTemplate>
如果我使用 Module Discovery,我可以做什么来显示来自相应视图模型的视图?
What can I do to show the view from the respective view model if I'm using Module Discovery?
推荐答案
您是否查看了 ItemTemplateSelector 属性?
Have you looked at the ItemTemplateSelector property?
例如,创建一个内容选择器类:
For example, create a content selector class:
public class myContentSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item != null)
{
VMBase vm = item as VMBase;
switch (vm.Type)
{
case myType.General:
return Application.Current.Resources["GeneralSettings"] as DataTemplate;
default:
return Application.Current.Resources["AdvancedSettings"] as DataTemplate;
}
}
return null;
}
}
为它创建一个静态资源:
Create a static resource for it:
<local:myContentSelector x:Key="contentSelector" />
并在ItemsControl中设置:
And set in the ItemsControl:
<ItemsControl ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />
并将您的数据模板设置为名称:
And set your datatemplates to the names:
<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}">
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}">
<View:AdvancedSettingsView/>
</DataTemplate>
类似的东西?
这篇关于在 ItemsControl 中查看注入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!