Используйте 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;
}
}