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;
}
}