明确设置ItemTemplate的Datacontext

本文关键字:Datacontext ItemTemplate 设置 | 更新日期: 2023-09-27 18:17:54

我有下面的代码。WordListWordObservableCollection

我想要完成的事情是将每个项目的DataContext设置为包装器类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>

明确设置ItemTemplate的Datacontext

您可以使用代理来保存每个条目中的隐式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>