访问ListBox中包含的TextBlock

时间:2011-05-01 18:48:30

标签: c# visual-studio silverlight

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

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

我厌倦了将TextBLock从ListBox中移出并且它工作正常,但是当它在里面时它不会工作。有谁知道如何引用这个文本块。

这是我的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>

2 个答案:

答案 0 :(得分:1)

假设您在代码隐藏文件中编写if语句,不会像:

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

正如Russell指出的那样,列表中的每个条目都有一个category1项。我假设您想要对所选项目执行某些操作。

答案 1 :(得分:0)

这是由于xaml namescopes。 DataTemplate中的名称与外部名称不同,这就是你无法访问它们的原因(@Russell指出这是为什么以这种方式完成的原因)。

我认为您想要访问绑定到Details集合的HINList ListBox的所选项目上的“Category1”属性的该字段。您可以做的是将Category1上的绑定设置为双向,并将ListBox的SelectedItem绑定到Detail项,如下所示:

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==...)
{
   ....
}

希望这会有所帮助:)