我对绑定(bind)有一个非常讨厌的问题。我知道还有其他有关将itemtemplate内的主题绑定(bind)到模板外的对象的datacontext的主题。但是,这只是行不通的,即第一个文本块根据需要显示为'Test',而itemtemplate内部的相同文本框什么也不显示。

  <TextBlock Text="{Binding DataContext.Test, ElementName=myList}"/>
  <ItemsControl x:Name="myList" ItemsSource="{Binding AllItems}"
                Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Center">
       <ItemsControl.ItemsPanel>
           <ItemsPanelTemplate>
                <toolkit:WrapPanel Orientation="Horizontal"
                                           ItemHeight="170" ItemWidth="140"/>
           </ItemsPanelTemplate>
       </ItemsControl.ItemsPanel>
       <ItemsControl.ItemTemplate>
           <DataTemplate>
              <StackPanel>
                 <Image x:Name="{Binding KeyName}"
                        Source="{Binding ImagePath}"
                        Width="128"
                        Height="128">
                 </Image>

                 <TextBlock Text="{Binding DataContext.Test, ElementName=myList}"/>
                        </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

我希望在这里为您提供一些帮助,因为这对我来说确实是一个问题。

最佳答案

在itemtemplate内部,绑定(bind)被初始化为AllItems中当前项目的上下文。

更新

ItemTemplate之外,您的绑定(bind)是相对于页面的DataContext的。**

一旦进入ItemTemplate,绑定(bind)就被限制在当时专门评估的项目范围内。

因此,如果我们假设以下情况(基于您问题中的代码):

<ItemsControl x:Name="myList" ItemsSource="{Binding AllItems}" >
    <ItemsControl.ItemTemplate>
         <DataTemplate>
             <StackPanel>
                 <TextBlock x:Name="tb1"
                        Text="{Binding DataContext.Test, ElementName=myList}"/>
                 <TextBlock x:Name="tb2" Text="{Binding KeyName}"/>
             </StackPanel>
         </DataTemplate>
     </ItemsControl.ItemTemplate>
 </ItemsControl>
tb1无法直接访问DataContext对象。tb2无法访问KeyName-假设AllItems是IEnumerable的任何对象都包含具有该名称的属性。

据我了解,在itemtemplate内部,从枚举中过去的项目控制了绑定(bind)源,并且不能覆盖它(通过设置ElementName或其他方式)。

如果在枚举中的每个对象中都需要Test中的值,则需要将其添加为枚举中对象的属性。

我敢肯定,比我更有知识的人可以解释为什么会这样,或者给出更好的解释,但这就是要点。

**假设没有其他的ItemsControl嵌套(或等效的嵌套)

关于silverlight - ItemTemplate内DataContext的访问属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4868992/

10-10 14:21