#c# #visual-studio #silverlight
#c# #visual-студия #silverlight #visual-studio
Вопрос:
У меня есть текстовый блок, который находится внутри listbox, и я пытаюсь написать оператор if, который зависит от содержимого этого текстового блока. Я пытаюсь получить данные из TextBlack, который я назвал «category1», однако, когда я пытаюсь написать свой оператор if, я получаю сообщение, в котором просто говорится
«имя category1 не существует в текущем контексте»
Я устал перемещать этот текстовый блок из 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>
Комментарии:
1. Для каждого элемента списка будет текстовый блок. Если вы пытаетесь определить, что такое Category1 для определенного элемента, почему бы не использовать сам фактический элемент в коллекции сведений?
Ответ №1:
Предполагая, что вы пишете свой оператор if в коде за файлом, не будет ли что-то вроде:
if(((WhateverTypeIsInDetailsCollection)HINList.SelectedItem).Category1 == something) {
// then do whatever you want
}
Как указал Рассел, для каждой записи в списке есть элемент category1. Я предполагаю, что вы хотели что-то сделать с выбранным элементом.
Ответ №2:
Это связано с xaml namescopes. Имена внутри DataTemplate находятся в другой области имен, чем снаружи, вот почему вы не можете получить к ним доступ (то, на что указал @ Russell, является частью того, почему это сделано таким образом).
Я думаю, что вы хотите получить доступ к этому полю для свойства «Category1» в выбранном элементе списка HINList, который привязан к коллекции сведений. Что вы можете сделать, так это установить двустороннюю привязку к Category1 и привязать SelectedItem
ListBox к элементу 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==...)
{
....
}
Надеюсь, это поможет 🙂