2014-09-28 15 views
7

Tôi gặp sự cố với MenuFlyout. Tôi đang cố gắng để có được một menu ngữ cảnh, hoạt động tốt, để cung cấp cho người dùng các tùy chọn 'xóa' và 'chỉnh sửa'. Nhưng nếu người dùng nhấp vào một trong các tùy chọn đó, có vẻ như không có giải pháp về cách lấy listview hoặc mục đã chọn. Có lẽ tôi chỉ bối rối về một cái gì đó, nhưng tôi đã tìm kiếm cả ngày và mặc dù mọi người có vấn đề tương tự, nhưng không có giải pháp nào phù hợp với tôi.Cách thiết lập chính xác 'ContextMenu' trong ListView cho Windows Phone 8.1?

XAML:

<Pivot x:Name="MyPivot" Title="MyTitle" ItemsSource="{Binding}"> 
     <Pivot.HeaderTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}"/> 
      </DataTemplate> 
     </Pivot.HeaderTemplate> 

     <Pivot.ItemTemplate> 
      <DataTemplate> 
       <ScrollViewer> 
        <ListView x:Name="MyListView" ItemsSource="{Binding Items}"> 
         <ListView.ItemContainerStyle> 
          <Style TargetType="ListViewItem"> 
           <Setter Property="HorizontalAlignment" Value="Stretch"/> 
           <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
           <Setter Property="Margin" Value="0,0,0,10"/> 
          </Style> 
         </ListView.ItemContainerStyle> 

         <ListView.ItemTemplate> 
          <DataTemplate> 
           <Grid Holding="Grid_Holding"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="Auto"/> 
            </Grid.ColumnDefinitions> 

            <FlyoutBase.AttachedFlyout> 
             <MenuFlyout> 
              <MenuFlyoutItem x:Name="EditButton" 
                  Text="Edit" 
                  Click="EditButton_Click"/> 
              <MenuFlyoutItem x:Name="DeleteButton" 
                  Text="Delete" 
                  Click="DeleteButton_Click"/> 
             </MenuFlyout> 
            </FlyoutBase.AttachedFlyout> 

            // Content (TextBlocks...) 

           </Grid> 
          </DataTemplate> 
         </ListView.ItemTemplate> 
        </ListView> 
       </ScrollViewer> 
      </DataTemplate> 
     </Pivot.ItemTemplate> 
    </Pivot> 

C#

private void Grid_Holding(object sender, HoldingRoutedEventArgs e) 
    { 
     FrameworkElement senderElement = sender as FrameworkElement; 
     FlyoutBase flyoutBase = FlyoutBase.GetAttachedFlyout(senderElement); 
     flyoutBase.ShowAt(senderElement); 
    } 

Trả lời

8

Khi sự kiện click của bạn được nâng lên, bạn có thể nhận DataContext của FrameworkElement.

private void EditButton_Click(object sender, RoutedEventArgs e) 
{ 
    var datacontext = (e.OriginalSource as FrameworkElement).DataContext; 

    //this datacontext is probably some object of some type T (whatever is in your Items collections you haven't specified in your question) 
} 
+0

Cảm ơn hoạt động chính xác theo cách tôi muốn. – Cort3vl

Các vấn đề liên quan