显式设置 ItemTemplate 的 Datacontext
Set Datacontext of an ItemTemplate explicitly
我有下面的代码。 WordList
是 Word
的 ObservableCollection
。
我想要完成的事情是将每个项目的 DataContext
设置为包装器 class 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>
我有下面的代码。 WordList
是 Word
的 ObservableCollection
。
我想要完成的事情是将每个项目的 DataContext
设置为包装器 class 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>