访问包含在ListBox中的TextBlock

本文关键字:中的 TextBlock ListBox 包含 访问 | 更新日期: 2023-09-27 17:54:38

我有一个文本块这是在一个列表框内,我试图写一个if语句这是依赖于这个文本块的内容。我试图从我命名为"category1"的TextBlack中获取数据,但是当我试图编写我的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>

访问包含在ListBox中的TextBlock

假设您在文件后面的代码中编写if语句,不会是这样的:

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

正如Russell所指出的,列表中的每个条目都有一个类别1项。

这是由于xaml命名域。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==...)
{
   ....
}

希望这对你有帮助