2014-04-15 3 views
0

저는 현재 GridView를 사용하여 내 Xaml에 바인딩 할 객체 컬렉션을 보유하고 있습니다. GridView가 내가 성취하고자하는 목적에 가장 적합한 도구인지는 모르겠습니다. 내가 GRID1에 클릭 된/탭 트리거가 필요GridView의 ItemClick 이벤트

data template

:

이 대략 현재의 내 DataTemplate을합니다. 그러나이 템플릿을 GridView와 함께 사용하면 ItemClick 이벤트가 전체 템플릿에서 트리거됩니다. 물론 올바른 것입니다. Grid1에서 클릭 이벤트를 설정하려면 어떻게해야합니까? 내 DataTemplate 선언에이 이벤트를 추가 할 수 있습니까? 기본적으로 내의 GridView에 대한 XAML의

:

<GridView x:Name="RoomsGridView" 
        VerticalAlignment="Top" 
        ItemsSource="{Binding Rooms}" 
        ItemTemplate="{StaticResource RoomTemplate}" 
        SelectionMode="None" 
        IsSwipeEnabled="false" 
        IsItemClickEnabled="True" 
        ItemClick="RoomsGridView_ItemClick" Padding="0"> 
         <GridView.ItemsPanel> 
          <ItemsPanelTemplate> 
           <StackPanel Orientation="Horizontal"/> 
          </ItemsPanelTemplate> 
         </GridView.ItemsPanel>        
        </GridView> 

편집 : 나는 this sample 발견했지만이 버튼 작동 만 보인다!?

답변

1

위에 게시 한 코드에서 GridView에게 IsItemClickEnabled="True"을 통해 항목 클릭을 포착한다고 말한 것입니다. DataTemplate 안에있는 요소를 클릭 할 수있게하려면 해당 옵션을 활성화 할 수 없습니다.

IsItemClickEnabled을 사용 중지하고 대신 Grid1에 클릭 핸들러를 추가하는 것이 좋습니다. 사용자 지정 스타일링이있는 단추로 Grid1을 대체하는 것이 더 좋습니다. 이렇게하면 뷰 모델에서 제어 할 수있는 명령에 단추를 바인딩 할 수 있습니다.

+0

안녕하세요, Kasper, 내 Datatemplate의 Grid1에 "Tapped"이벤트를 추가했는데 내 뷰 모델에서이 이벤트에 어떻게 액세스 할 수 있습니까? 편집 : 내가 한 것처럼 StandardStyles 파일에있는 경우 Datatemplates에서 이벤트를 "쉽게"사용할 수없는 것처럼 보입니다. 이제는 페이지 리소스에 로컬로 datatemplate이 있고 모든 이벤트가 작동합니다. 이 문제점에 대한 추가 정보 : http://social.msdn.microsoft.com/Forums/en-US/3e6ef7ea-d9b9-4219-8df4-f3355a1d2b5c/windows-81-datatemplate-in-xaml-resource-file-button- click-event-is-not-called-forum = winappswithcsharp – Johann

+1

가능한 한 Command를 사용하는 것이 좋습니다. 이러한 모델은보기 모델에서 사용하기 쉽고 어떤 방식 으로든 데이터 템플릿을 제한하지 않습니다. –

+0

좋아요. 명령을 파헤칩니다. :) 그러나 확실한 것은 : Grid의 "Tapped"이벤트로 명령을 사용할 수 있습니까? 아니면 버튼의 Command 속성에서만 명령을 사용할 수 있습니까? 탭된 이벤트에서 어떻게 사용하는지 분명하지 않습니다. – Johann

관련 문제