2014-06-16 3 views
0

나는 listbox datatemplate에 2 개의 텍스트 블록을 가지고 있습니다. 알파벳순으로 이름 목록을 표시하고 싶습니다. 첫 번째 텍스트 블록은 해당 문자가있는 문자열의 시작 부분에만 이름의 첫 번째 문자를 표시하고 두 번째 문자 블록은 문자열을 표시해야합니다.Windows에서 목록 상자 바인딩 전화

아래의 링크

http://i.stack.imgur.com/4mdtu.png

그것은 같은 것입니다 확인하시기 바랍니다 : XAML :

<ListBox Height="331" Name="lstBoxPlayers" MinHeight="200" MinWidth="150" Margin="0,0,0,20" SelectionChanged="lstBoxPlayers_SelectionChanged" 
       Tap="lstBoxPlayers_Tap" > 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border BorderBrush="Black" BorderThickness="0,0,0,1" MinWidth="200" Margin="0,0,0,0" Grid.Column="0"> 

         <Grid Background="White" MinWidth="200" Height="50"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 

          <TextBlock x:Name="Abrev" Text="{Binding Path=PlayerShortName[0]}" FontSize="30" Foreground="Black" Height="Auto" Width="26" TextAlignment="Center"> 
          </TextBlock> 
          <TextBlock Grid.Column="1" Text="{Binding PlayerShortName}" Foreground="Black" FontSize="16" Height="29" MaxWidth="160" Margin="-25,0,0,0" TextAlignment="Center"> 
          </TextBlock> 
         </Grid> 
        </Border> 
       </DataTemplate> 

      </ListBox.ItemTemplate> 

     </ListBox> 

코드 숨김

0 나는이 시도

A Ana 
    Andrew 
    Andy 
B Bane 
    Bob 
C Chris 
    Christian 
    Catherine 
lstBoxPlayers.ItemsSource = PlayerList; //List of string 
+0

내 xaml 코드를 추가했습니다. 그것을 확인하시기 바랍니다. 감사합니다 – user3701876

답변

0
당신은 알파벳 그룹을 형성하고 목록 상자에 그룹의 결과 컬렉션을 바인딩 GROUPBY을 사용할 수 있습니다

..

코드 뒤에 같을 것이다 : 당신의

lstBoxPlayers.ItemsSource = PlayerList.GroupBy(p => p.PlayerShortName[ 0 ]); 

그리고 XAML 그리드 모양은 다음과 같습니다.

<!--Key of the Group--> 
<TextBlock x:Name="Abrev" Text="{Binding Path=Key}" FontSize="30" Foreground="Black" Height="Auto" Width="26" TextAlignment="Center" VerticalAlignment="Top"></TextBlock> 

<!--Values of the Group--> 
<ItemsControl Grid.Column="1" ItemsSource="{Binding}" Margin="-25,0,0,0" > 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Grid.Column="1" Text="{Binding PlayerShortName}" Foreground="Black" FontSize="16" Height="29" MaxWidth="160" TextAlignment="Center"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

작동하지 않습니다. 빈 목록 항목이 나타납니다. – user3701876

+0

GroupBy가 ITemsSource를 올바르게 채우고 있습니까? – bit

+0

아니요. 목록에 listitems가 채워지지만 textblock이 바인딩되지 않습니다. – user3701876

관련 문제