2011-02-01 64 views
3

我有一个非常讨厌的绑定问题。我知道有关于将itemtemplate中的itmes绑定到模板外部的对象的datacontext的其他主题。然而,这只是不会工作,即第一个文本块显示'测试'所需,而itemtemplate内的相同文本框什么也没有显示。在ItemTemplate里面的DataContext的访问属性

<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> 

我很感谢这里的人帮助,因为这对我来说确实是一个问题。

+0

没有其他嵌套这是一个有点神秘的......我试着重现你有什么在这里,它似乎为我工作。这可能会帮助您的潜在答复者产生以下其中一个:http://sscce.org/ – McGarnagle 2012-11-21 17:35:30

回答

4

在itemtemplate中,绑定初始化为AllItems中当前项目的上下文。

更新

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

ItemTemplate然后绑定仅限于该项目。特别是被评估的范围内

一旦那时。

因此,如果我们假设如下(根据你的问题的代码):

<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 cann access KeyName - 假设任何对象AllItems是IEnumerable包含具有该名称的属性。

据我所知,在itemtemplate中,从枚举过去的项控制绑定源,并且这不能被覆盖(通过设置ElementName或其他)。

如果您需要枚举中每个对象的值为Test,那么您需要将其作为枚举中对象的属性添加。

我确定有人比我更懂事,可以解释为什么这样或给出更好的解释,但这是它的要点。

**假设ItemsControls(或同等学历)

+1

这就是{Binding DataContext.Test,ElementName = myList}的要点。 – Miro 2011-02-02 10:16:08