2012-11-10 40 views
6

Đây phải là một nhiệm vụ tầm thường nhưng tôi không thể tìm thấy cách thực hiện. Tôi muốn nghe một nhấp chuột vào một mục trong một listview, nhận được các đối tượng mô hình tương ứng, và khởi động một màn hình mới.Cách nhận mục được nhấp trong ListView

Đây là XAML cho ListView:

<ListView x:Name="ItemListView" 
    ItemTemplate="{StaticResource StoreFrontTileTemplate}" 
    ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}" 
    Margin="0" VerticalAlignment="Top" ItemClick="MyClick" Tapped="MyTap"/> 

Và MyClick, MyTap:

private void MyClick(object sender, ItemClickEventArgs e) 
{ 
    Debug.WriteLine("Click!"); 
} 

private void MyTap(object sender, TappedRoutedEventArgs e) 
{ 
    Debug.WriteLine("TAp!!" + sender.ToString() + "--" + e.ToString()); 
} 

Phương pháp để điều hướng đến màn hình mới:

this.Frame.Navigate(typeof(SecondScreen)); 

Nó hoạt động, nhưng tôi cần đối tượng mô hình của mục được nhấp và chuyển nó như một tham số cho màn hình thứ hai.

Nhưng MyClick không bao giờ được gọi và MyTap không cung cấp cho tôi bất kỳ Thông tin nào về mục được nhấp. "người gửi" là ListView.

Tôi đã tải về những exaples:

http://code.msdn.microsoft.com/windowsapps/XAML-ListView-sample-pack-0ec6b60f

Nhưng nó không chứa những gì tôi cần, có một cái nhìn tổng thể/chi tiết, nhưng nó hoạt động với cam kết ràng buộc và những gì tôi muốn làm là khởi động một hoàn chỉnh màn hình mới.

Lưu ý: Tôi là một noob trong phát triển Windows và định hướng theo cách thông thường để thực hiện trong Android hoặc iOS nơi bạn triển khai gọi lại với vị trí của phần tử được nhấp. Không có ý tưởng về đúng cách để làm điều đó trong Windows 8.

Trả lời

27

Bạn có thể sử dụng các sự kiện SelectionChanged:

<ListView x:Name="ItemListView" SelectionChanged="MySelectionChanged" /> 

Và bạn có thể lấy/mục deseleted chọn từ SelectionChangedEventArgs ví dụ:

private void MySelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    Debug.WriteLine("Selected: {0}", e.AddedItems[0]); 
} 

Hoặc nếu bạn không cần chức năng lựa chọn và sử dụng chức năng ItemClick="MyClick" , bạn cần phải đặt IsItemClickEnabled thành true:

Nhận hoặc đặt giá trị cho biết liệu các mục trong chế độ xem có tăng sự kiện ItemClick để phản hồi tương tác hay không.

<ListView x:Name="ItemListView" 
    ItemTemplate="{StaticResource StoreFrontTileTemplate}" 
    ItemContainerStyle="{StaticResource StoreFrontLVTileStyle}" 
    Margin="0" VerticalAlignment="Top" ItemClick="MyClick" 
    IsItemClickEnabled="bool" SelectionMode="None"/> 

Lưu ý rằng trong trường hợp này bạn cũng cần phải thiết lập các SelectionMode-None.

+0

Cảm ơn! nhấp chuột cũng như lựa chọn hoạt động. – Ixx

+2

Làm cách nào để giữ chỉ mục của Mục được nhấp? –

+0

@AmoghTalpallikar ItemClickEventArgs có tham chiếu đến mục được nhấp vào – hendrix

1

Bạn có thể sử dụng DoubleTapped sự kiện của chế độ xem danh sách trên mã XAML. Và sau đó, trong mã C# bạn có thể nhận được vị trí của:

private void display_DoubleTapped_1(object sender, 
    Windows.UI.Xaml.Input.DoubleTappedRoutedEventArgs e) 
{ 
    int items = display.SelectedIndex; 
    // use this index to do something 
} 
1

tôi sử dụng này:

private void ListUI_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     if(ListUI.SelectedItems.Count != 0) 
     { 
      Debug.WriteLine("It's not a trap at all my friend"); 
     } 
     else 
     { 
      Debug.WriteLine("Its a trap"); 
     } 
    } 
0
 // We have a class name 'Message' in ControllerLibrary Namespace 

     namespace ControllerLibrary 
      { 
       public class Message 
       { 
        public string MessageID { get; set; } 
        public string MessageName { get; set; } 
       } 
      } 

    // Add name space at page heading 
       xmlns:local1="using:ControllerLibrary" 

     //At Gridview 

     <GridView IsItemClickEnabled="True" Name="UserMessageList"> 
     <GridView.ItemTemplate> 
      <DataTemplate x:DataType="local1:Message">           <StackPanel Orientation="Horizontal"> 
     <Button Content="{x:Bind MessageName}" HorizontalAlignment="Left" Margin="2 0 10 0" Click="btnUserMessage_Click"> 
     </Button> 
     </StackPanel> 
     </DataTemplate> 
     </GridView.ItemTemplate> 
     </GridView> 

    //At code Behind 
    private void btnAddPage_Click(object sender, RoutedEventArgs e) 
     { 
      //Get selecte message 
      var selectedMessage = (sender as Button).DataContext as Message; 
     } 
Các vấn đề liên quan