對於我的應用程序,我有一個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