我有一个MyAssembly
带有定制WPF
控件的程序集MyControl
。该控件显示不同类型的对象,并且为此类型使用特定的数据模板:
<MyControl.Resources>
<DataTemplate DataType="{x:Type local:MyFirstType}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type local:MySecondType}">
...
</DataTemplate>
</MyControl.Resources>
问:如何允许程序员定义新的数据模板来替换由创建的UI MyControl
?这里的通用设计原则是什么?
尝试使用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"/>
我希望这会给您一个想法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句