2013-07-11 2 views
0

WinRT에 익숙하지 않아 바보 같은 질문 인 경우 사과드립니다.WinRT 하드 코딩 된 ListViewItem 대 DataTemplate, 왜 보이지 않습니까?

<ListView x:Name="MyListView1" 
     Grid.Row="1" 
     Margin="120,300,0,0" 
     Width="500" 
     HorizontalAlignment="Left"> 

    <ListViewItem Background="DodgerBlue"> 

     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="200" /> 
       <ColumnDefinition Width="300" /> 
      </Grid.ColumnDefinitions> 

      <TextBlock Text="hardcoded value 1" Grid.Column="0"></TextBlock> 
      <TextBlock Text="hardcoded value 2" Grid.Column="1"></TextBlock> 

     </Grid> 

    </ListViewItem> 
</ListView> 

이 내가 그것을보고 원하는 모습이, 당신은 항목을 클릭하는 경우는 전체 행을 선택합니다 : 나는 다음의 ListView를 만들었습니다. 그러나 이것을 DataTemplate으로 옮기면 같은 모양이 아니며 더 이상 전체 행을 클릭 할 수 없습니다. (대상 항목 유형이 ListViewItem 인 ItemContainerStyle을 추가하고 배경을 노란색으로 설정하면 하드 코드 된 ListItem과 크기가 같아지기 때문에 노란색 윤곽선을 클릭하면됩니다.)이 코드는 :

<ListView x:Name="MyListView2" 
     ItemTemplate="{StaticResource MyTemplate}" 
     ItemsSource="{Binding MyData}" 
     Grid.Row="1" 
     Margin="120,0,0,0" 
     Width="500" 
     HorizontalAlignment="Left"> 

</ListView> 

그리고 StandardStyles.xaml에서

: 나는 그들이 보이지 않는 이유를 이해하지 않습니다

<DataTemplate x:Key="MyTemplate"> 

    <ListViewItem Background="DodgerBlue"> 

     <Grid> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="200" /> 
       <ColumnDefinition Width="300" /> 
      </Grid.ColumnDefinitions> 

      <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock> 
      <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock> 

     </Grid> 

    </ListViewItem> 
</DataTemplate> 

은/같은 작업 -이 동일한 코드로 채워하지 말아야 할 때를 그것을 묶어 라? 작동하게하려면 어떻게해야합니까?

답변

2

문제는 데이터 형식을 만든 방법입니다. ListViewItem은 목록에 표시해야하는 모든 객체에 추가 된 래퍼이므로 listviewitem이 포함 된 데이터 템플릿을 만들면 기본적으로 객체를 두 번 감싸는 것입니다. 당신이해야 할 일은 데이터 템플릿에서 listviewitem 요소를 제거하는 것입니다.

<DataTemplate x:Key="MyTemplate"> 

    <Grid Background="DodgerBlue"> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="200" /> 
      <ColumnDefinition Width="300" /> 
     </Grid.ColumnDefinitions> 

     <TextBlock Text="{Binding MyDataOne}" Grid.Column="0"></TextBlock> 
     <TextBlock Text="{Binding MyDataTwo}" Grid.Column="1"></TextBlock> 

    </Grid></DataTemplate> 
+0

물론 지금은 완전히 이해가됩니다. 정말 고맙습니다! (늦게 받아 들여서 죄송합니다. 질문을 게시 한 다음날 방학에 갔다가 방금 돌아 왔습니다.) – annelie

관련 문제