【发布时间】:2014-06-24 09:18:33
【问题描述】:
我有一个 DXTabControl。 DXTabItems 是通过我的 ViewModel 生成的。
//MainViewModel
public MainViewModel()
{
var items = new ObservableCollection<DXTabItem>();
items.Add(
new DXTabItem()
{
Header = "Test1",
Content = new WebViewModel()
});
items.Add(
new DXTabItem()
{
Header = "Test2",
Content = new CMSViewModel()
});
TabItems = items;
}
private ObservableCollection<DXTabItem> _tabItems;
public ObservableCollection<DXTabItem> TabItems
{
get { return _tabItems; }
set { SetProperty(ref _tabItems, value, () => TabItems); }
}
我正在使用 DataTemplate,但我的 TabItem 仍然没有显示任何 UserControl。
//MainView.xaml
<DataTemplate x:Key="WebTemplate" DataType="{x:Type viewmodel:WebViewModel}">
<view:WebView/>
</DataTemplate>
<DataTemplate x:Key="CMSTemplate" DataType="{x:Type viewmodel:CMSViewModel}">
<view:CMSView/>
</DataTemplate>
<datatemplate:TemplateSelector x:Key="DataTemplateSelector"
WebTemplate="{StaticResource WebTemplate}"
CMSTemplate="{StaticResource CMSTemplate}" />
<dx:DXTabControl ItemsSource="{Binding TabItems}" ItemTemplateSelector="{StaticResource DataTemplateSelector}" />
//数据模板选择器
public class TemplateSelector : DataTemplateSelector
{
public DataTemplate WebTemplate { get; set; }
public DataTemplate CMSTemplate { get; set; }
public override DataTemplate SelectTemplate(Object item,
DependencyObject container)
{
if (item == null) return base.SelectTemplate(item, container);
if (item.GetType() == typeof(WebViewModel))
{
return WebTemplate;
}
else if (item.GetType() == typeof(CMSViewModel))
{
return CMSTemplate;
}
else return base.SelectTemplate(item, container);
}
}
一切正常,除了显示我需要的内容。没有显示视图。任何想法?我错过了什么吗?
【问题讨论】:
-
你有没有得到这个答案?我今天在使用 DevExpress v14.1 时遇到了同样的问题。
-
嗯,是的,有点。我正在与 caliburn.micro 合作,你也是吗?明天我在办公室时,我可以尝试为您提供答案。目前,我正在使用智能手机。
-
我试图弄清楚如何让用户控件出现在选项卡项中(不是标题,而是内容区域)。不适用于 caliburn.micro。
-
哦,如果你正在使用 caliburn.micro,我会给你一些有用的东西 ;) 给我一些时间 ^^
-
我的错,我把你的“不使用 caliburn.micro”解释错了。我对此感到抱歉。你应该试试看。它使您的生活更轻松。没有caliburn.micro,我不确定,但它应该是可行的。还没看呢。
标签: c# wpf xaml devexpress tabcontrol