明确设置ItemTemplate的Datacontext
本文关键字:Datacontext ItemTemplate 设置 | 更新日期: 2023-09-27 18:17:54
我有下面的代码。WordList
是Word
的ObservableCollection
。
我想要完成的事情是将每个项目的DataContext
设置为包装器类NewWordViewModel
而不是默认设置的Word
对象。CorrespondingWord
是NewWordViewModel
的一个依赖属性。
问题是xaml代码创建了一个NewWordViewModel
并将其设置为DataContext
,但没有将CorrespondingWord
属性设置为实际的Word
对象。
是否有一个xaml的方式来设置这个属性?
<ItemsControl ItemsSource="{Binding WordList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<ui:NewWord>
<ui:NewWord.DataContext>
<viewModels:NewWordViewModel CorrespondingWord="{Binding}"/>
</ui:NewWord.DataContext>
</ui:NewWord>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您可以使用代理来保存每个条目中的隐式DataContext
,并正常设置Binding,如下所示:
<ItemsControl ItemsSource="{Binding WordList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<Border.Resources>
<DiscreteObjectKeyFrame x:Key="proxy" Value="{Binding}"/>
</Border.Resources>
<ui:NewWord>
<ui:NewWord.DataContext>
<viewModels:NewWordViewModel
CorrespondingWord="{Binding Value, Source={StaticResource proxy}}"/>
</ui:NewWord.DataContext>
</ui:NewWord>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>