我有一个程序集MyAssembly
,其中包含一个自定义的WPF
控件MyControl
。此控件显示不同类型的对象,并且使用此类型特定的数据模板:
<MyControl.Resources>
<DataTemplate DataType="{x:Type local:MyFirstType}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type local:MySecondType}">
...
</DataTemplate>
</MyControl.Resources>
问:
如何让程序员定义替换由MyControl
创建的UI的新数据模板?这里的共同设计原则是什么?
答案 0 :(得分:0)
尝试使用ItemTemplateSelector / ContentTemplateSelector。 ContentTemplateSelector ItemTemplateSelector
public class TaskListDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
if (element != null && item != null && item is Task)
{
//Set Template based on conditions
Task taskitem = item as Task;
if (taskitem.Priority == 1)
return
element.FindResource("importantTaskTemplate") as DataTemplate;
else
return
element.FindResource("myTaskTemplate") as DataTemplate;
}
return null;
}
}
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
我希望这会给你一个想法。