2011-05-01 103 views
1

我有一个文本块在列表框中,我试图编写一个依赖于此文本块内容的if语句。我试图从TextBlack中获取数据,我已命名为“category1”,但是当我尝试写入if语句时,我收到的消息只是说访问列表框中包含的TextBlock

“名称category1在当前上下文中不存在”

我累了将TextBlock移出列表框,它工作正常,但不会工作,而其内部。有谁知道如何引用这个文本块。

这里是我的XAML代码

 <ListBox x:Name="HINList" Margin="0,300,-12,0" ItemsSource="{Binding Details}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17" Width="432"> 
         <TextBlock Text="{Binding HINNumber}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextExtraLargeStyle}"/> 
         <TextBlock Text="{Binding CategoryLetter}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
         <TextBlock x:Name="category1" Text="{Binding Category1}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
         <TextBlock Text="{Binding Category2}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
         <TextBlock Text="{Binding Category3}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextNormalStyle}"/> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
+0

每个列表项都会有一个文本块。如果您正在试图确定Category1是否适用于特定项目,为何不在Details集合中使用实际项目本身? – 2011-05-01 19:08:59

回答

1

假设你写你如果代码隐藏文件声明,就不会是这样的:

if(((WhateverTypeIsInDetailsCollection)HINList.SelectedItem).Category1 == something) { 
    // then do whatever you want 
} 

正如罗素指出的有列表中每个条目的category1项目。我假设你想对选定的项目做些什么。

0

这是由于xaml namescopes。 DataTemplate中的名称与外部名称不同,这就是为什么你不能访问它们(@Russell指出的是为什么这样做的原因之一)。

我认为你希望访问绑定到Details集合的HINList ListBox的选定项上的“Category1”属性的那个字段。你可以做的是设置在组别的结合是双向的,并绑定列表框的SelectedItem到详细项目,像这样:

XAML:

<ListBox x:Name="HINList" ItemsSource="{Binding Details}" 
     SelectedItem={Binding SelectedDetailItem, Mode=TwoWay}> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Margin="0,0,0,17" Width="432"> 
     <TextBlock Text="{Binding Category1, Mode=TwoWay}" TextWrapping="Wrap" .../> 
     <!-- the other fields --> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

代码隐藏

if(SelectedDetailsItem.Category1==...) 
{ 
    .... 
} 

希望这有助于:)