对于我的应用程序,我有一个ItemsControl,它具有用于第一项的独特模板(简称为Template2)和其余项目的默认模板(Template1)。我曾与下面的XAML这样做:强制更新WPF中的RelativeSource绑定
<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设置为显式并手动更新源,但我不知道如何在数据模板内部执行此操作。先谢谢您的帮助。
你好,谢谢你的回复。我使用了你描述的方法,但同样的问题发生了;当我删除ItemControl绑定的ObservableCollection的索引0时,模板不会立即更新。在更新应用之前,我需要切换视图。你还有其他建议吗? –
@ClementHoang为你做了更新的答案吗? – Nitin