我有一个ItemsControl
,其中包含一个页面显示的项目集合。
ItemsControl
具有ItemTemplate
属性,该属性设置为某个DataTemplate资源。
<DataTemplate x:Key="SimpleTemplate">
<!-- .... -->
</DataTemplate>
<DataTemplate x:Key="ComplexTemplate">
<!-- .... -->
</DataTemplate>
...............................
<ItemsControl
x:Name="MainCanvas"
DataContext="{StaticResource mainItems}"
ItemsSource="{Binding Path=Buttons}"
ItemTemplate="{StaticResource SimpleTemplate}"
>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Width="4000" Height="4000" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
是否可以通过编程方式为ItemsControl中的一个特定项目更改DataTemplate?
答案 0 :(得分:2)
听起来像是在寻找ItemTemplateSelector
您可以创建TemplateSelector并根据给定项目决定应用哪个模板:
public class MyTemplateSelector : DataTemplateSelector
{
public DataTemplate SimpleTemplate { get; set; }
public DataTemplate ComplexTemplate { get; set; }
public override System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container)
{
// Logic to decide which template to apply goes here
return // Either SimpleTemplate or ComplexTemplate
}
}
在xaml中,将模板选择器添加为资源
<local:MyTemplateSelector x:Key="itemTemplateSelector">
<local:MyTemplateSelector.SimpleTemplate>
<DataTemplate>
<!-- Implementation goes here -->
</DataTemplate>
</local:MyTemplateSelector.SimpleTemplate>
<local:MyTemplateSelector.ComplexTemplate>
<DataTemplate>
<!-- Implementation goes here -->
</DataTemplate>
</local:MyTemplateSelector.ComplexTemplate>
</local:MyTemplateSelector>
并在ItemsControl
<ItemsControl
x:Name="MainCanvas"
DataContext="{StaticResource mainItems}"
ItemsSource="{Binding Path=Buttons}"
ItemTemplateSelector="{StaticResource itemTemplateSelector}">
希望这有帮助