我有一个位于列表框内的文本块,我正在尝试编写一个依赖于此文本块内容的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>
答案 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==...)
{
....
}
希望这会有所帮助:)