2011-05-01 3 views
1

나는 목록 상자 안에있는 텍스트 블록을 가지고 있으며이 텍스트 블록의 내용에 의존하는 if 문을 작성하려고합니다. 나는 "category1"이라는 이름의 TextBlack에서 데이터를 가져 오려고하지만 if 문을 쓰려고하면 메시지가 나타납니다.ListBox 내에 포함 된 TextBlock에 액세스

"현재 컨텍스트에 이름 category1이 없습니다"

ListBox에서 TextBLock을 이동하는 것에 지쳐서 지치지 만 작동하지만 작동하지 않습니다. 누구든지이 텍스트 블록을 참조하는 방법을 알고 있습니까? 여기

는 내 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

모든 목록 항목에 대한 텍스트 블록이 있습니다. 특정 항목에 대한 Category1이 무엇인지 알아 내려고 시도하는 경우 Details 컬렉션에서 실제 항목 자체를 사용하지 않는 이유는 무엇입니까? –

답변

1

당신이 쓰고있어 가정 귀하의 경우 파일 뒤에 코드에서 문이 아니라 뭔가 싶습니다 : 러셀 지적

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

가 목록의 모든 항목에 대한 category1 항목 선택한 항목으로 무언가를하고 싶다고 가정합니다.

0

이것은 xaml namescopes이 원인입니다. DataTemplate 내부의 이름은 외부와 다른 네임 스코프에 있습니다. 그 이유는 당신이 그것들에 접근 할 수 없기 때문입니다 (@Russell이 지적한 것은 왜 이런 방식으로 이루어 졌는지의 일부입니다).

세부 정보 컬렉션에 바인딩 된 HINList ListBox의 선택한 항목에서 "Category1"속성에 해당 필드에 액세스하려고한다고 생각합니다.

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==...) 
{ 
    .... 
} 
당신이 할 수있는 것은 두 가지 방법이 될, 그래서 같은 세부 항목으로 목록 상자의 SelectedItem을 바인딩 카테고리 1에 바인딩을 설정

희망이 있습니다.

관련 문제