Доступ к TextBlock, который содержится внутри ListBox - PullRequest
1 голос
/ 01 мая 2011

У меня есть текстовый блок, который находится внутри списка, и я пытаюсь написать оператор if, который зависит от содержимого этого текстового блока.Я пытаюсь получить данные из TextBlack, который я назвал "category1", однако, когда я пытаюсь написать свое заявление if, я получаю сообщение, которое просто говорит

"имя категории 1 не существует в текущемcontext "

Я устал перемещать этот 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 ]

1 голос
/ 03 мая 2011

Если вы пишете оператор if в коде файла, не будет что-то вроде:

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

Как указал Рассел, для каждой записи в списке есть элемент категории 1. Я предполагаю, что вы хотели что-то сделать с выбранным элементом.

0 голосов
/ 04 мая 2011

Это связано с именами xaml . Имена внутри DataTemplate находятся в другой области имен, чем снаружи, поэтому вы не можете получить к ним доступ (то, на что указал @Russell, является частью того, почему это сделано таким образом).

Я думаю, что вы хотите получить доступ к этому полю для свойства "Category1" в выбранном элементе списка HINList ListBox, который связан с коллекцией Details. То, что вы можете сделать, это установить привязку к 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==...)
{
   ....
}

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...