使用DataTemplateSelector,并根据绑定的数据确定要使用的模板。
您也可以将其用于您前几天提出的问题。
public class DataTemplateSelector : ContentControl
{
public virtual DataTemplate SelectTemplate(object item, DependencyObject container)
{
throw new NotImplementedException();
}
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
然后是您选择的模板,具体取决于数据。这是我的一个:
public class EventTemplateSelector : DataTemplateSelector
{
public DataTemplate BreakTemplate
{
get;
set;
}
public DataTemplate EventTemplate
{
get;
set;
}
public DataTemplate DefaultTemplate
{
get;
set;
}
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item == null)
return DefaultTemplate;
// important stuff here
var _event = item as ConferenceEvent;
if (_event != null)
return _event.IsBreak ? BreakTemplate : EventTemplate;
else
return DefaultTemplate;
}
}