对于我的应用程序,我有一个 ItemsControl,其中第一个项目有一个不同的模板(简写为 Template2),其余项目有一个默认模板(Template1)。我已经使用以下 XAML 做到了这一点:
<DataTemplate x:Key="MyDataTemplate">
<ContentPresenter x:Name="TemplateContentPresenter"
Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
ContentTemplate="{StaticResource Template1}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
Converter= {StaticResource IsFirstItemInCollectionConverter}}"
Value="True">
<Setter TargetName="TemplateContentPresenter"
Property="ContentTemplate"
Value="{StaticResource Template2}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
IsFirstItemInCollectionConverter 的代码如下:
public class IsFirstItemInCollectionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
DependencyObject item = (DependencyObject)value;
ItemsControl ic = ItemsControl.ItemsControlFromItemContainer(item);
Console.WriteLine("converted");
return (ic.ItemContainerGenerator.IndexFromContainer(item) == 0);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
问题是当我在 itemsControl 的 itemssource 中进行更改时,我的绑定没有更新。(在显示 itemsControl 的视图中,我有可以添加和删除项目的按钮)。只有在我切换视图并重新加载它之后,绑定才会更新并显示正确的模板。我该如何纠正这种行为?我假设我必须将 UpdateSourceTrigger 设置为显式并手动更新源,但我不知道如何在数据模板中执行此操作。在此先感谢您的帮助。