在我的应用程序中,我正在处理ItemControl
。此itemControl接收一个ObservableCollection。
从上面可以看到,BaseItemViewModel是一个抽象类。当我的应用程序启动时,moduleCatalog
通过发现加载模块。
每个模块都有一个从BaseItemViewModel继承的类
所以我不能像这样在ItemsControl中设置dataTemplates:
<DataTemplate>
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate>
<View:AdvancedSettingsView/>
</DataTemplate>
如果我正在使用Module Discovery,该怎么做才能显示相应 View 模型中的 View ?
最佳答案
您是否看过ItemTemplateSelector属性?
例如,创建一个内容选择器类:
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;
}
}
为它创建一个静态资源:
<local:myContentSelector x:Key="contentSelector" />
并在ItemsControl中设置:
<ItemsControl ItemsSource="{Binding mySource}" ItemTemplateSelector="{StaticResource contentSelector}" />
并将您的数据模板设置为名称:
<DataTemplate x:Key="GeneralSettings" DataType="{x:Type vm:VMBase}">
<View:GeneralSettingsView/>
</DataTemplate>
<DataTemplate x:Key="AdvancedSettings" DataType="{x:Type vm:VMBase}">
<View:AdvancedSettingsView/>
</DataTemplate>
这样的东西?
关于c# - 查看ItemsControl内部的注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11335884/