I have an ItemsControl
that contains a collection of items that are shown at a page. The ItemsControl
has an ItemTemplate
property which is set to certain DataTemplate resource.
我有一个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>
Is it possible to change DataTemplate for a one specific item in my ItemsControl programmatically?
是否可以通过编程方式更改我的ItemsControl中的一个特定项目的DataTemplate?
1 个解决方案
#1
2
Sound like you are looking for ItemTemplateSelector
听起来像是在寻找ItemTemplateSelector
You can create a TemplateSelector and decide which template to apply based on a given item:
您可以创建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
}
}
In xaml, add your template selector as a resource
在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>
And use it in your ItemsControl
并在ItemsControl中使用它
<ItemsControl
x:Name="MainCanvas"
DataContext="{StaticResource mainItems}"
ItemsSource="{Binding Path=Buttons}"
ItemTemplateSelector="{StaticResource itemTemplateSelector}">
Hope this helps
希望这可以帮助
#1
2
Sound like you are looking for ItemTemplateSelector
听起来像是在寻找ItemTemplateSelector
You can create a TemplateSelector and decide which template to apply based on a given item:
您可以创建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
}
}
In xaml, add your template selector as a resource
在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>
And use it in your ItemsControl
并在ItemsControl中使用它
<ItemsControl
x:Name="MainCanvas"
DataContext="{StaticResource mainItems}"
ItemsSource="{Binding Path=Buttons}"
ItemTemplateSelector="{StaticResource itemTemplateSelector}">
Hope this helps
希望这可以帮助