为项控件中的特定项设置数据模板

本文关键字:置数据 控件 | 更新日期: 2023-09-27 18:32:38

我有一个ItemsControl,其中包含页面中显示的项目集合。ItemsControl具有设置为特定数据模板资源的 ItemTemplate 属性。

<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 中某个特定项的数据模板?

为项控件中的特定项设置数据模板

听起来你正在寻找 ItemTemplateSelector

您可以创建模板选择器,并根据给定项目决定要应用的模板:

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

希望这有帮助