显式设置 ItemTemplate 的 Datacontext

Set Datacontext of an ItemTemplate explicitly

我有下面的代码。 WordListWordObservableCollection

我想要完成的事情是将每个项目的 DataContext 设置为包装器 class NewWordViewModel 而不是默认设置的 Word 对象. CorrespondingWordNewWordViewModel 的依赖项 属性。

问题是 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>