UWP - Как получить значение ListViewItem с правой кнопкой мыши или правой кнопкой мыши без выбора Listviewitem? - PullRequest
0 голосов
/ 15 февраля 2020

привет, у меня есть список данных (sqlite), загруженный в просмотр списка, и все работает marravilla, если я выбираю listviewItem и щелкаю по нему правой кнопкой мыши, но я хочу получить текущий список viewview (под указателем) без выбора какого-либо элемента viewview

то, что я хочу, похоже на приложение «Microsoft to DO»

enter image description here

, и у меня есть следующий пример кода:

MainPage.xaml

<Grid>
    <ListView x:Name="myList">
        <ListViewItem>Item 1</ListViewItem>
        <ListViewItem>Item 2</ListViewItem>
        <ListViewItem>Item 3</ListViewItem>
        <ListViewItem>Item 4</ListViewItem>
        <ListViewItem>Item 5</ListViewItem>

        <ListView.ContextFlyout>
            <MenuFlyout x:Name="itemActual">
                <MenuFlyoutItem Text="see" Click="MenuFlyoutItem_Click"/>
            </MenuFlyout>
        </ListView.ContextFlyout>
    </ListView>

</Grid>

MainPage.xaml.cs:

 private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
    {
        ContentDialog dialog = new ContentDialog()
        {
            //Content = myList.item ????

            PrimaryButtonText = "ok"
        };
        dialog.ShowAsync();

    }

Заранее спасибо

1 Ответ

1 голос
/ 15 февраля 2020

Мой первоначальный ответ был неправильным, поэтому я решил отредактировать его.

Сначала создайте поле с именем _selectedValue с типом вашего ListView типа ItemsSource items, я буду назовите его «MyClass»:

private MyClass _selectedItem;

Затем зарегистрируйте событие RightTapped вашего ListView:

<ListView x:Name="myList" RightTapped="myList_RightTapped">

Оттуда получите DataContext из RightTappedRoutedEventArgs:

private void myList_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e) {
    _selectedItem = (e.OriginalSource as FrameworkElement).DataContext as MyClass;
}

Когда событие всплывающей подсказки Click сработало, используйте _selectedValue:

private void MenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) {
    // Do stuff with _selectedValue
}

Полные примеры файлов:

MainPage.cs :

 public sealed partial class MainPage : Page {
    #region Fields
    private List<MyClass> _items;
    private MyClass _selectedItem;
    #endregion

    public MainPage() {
        this.InitializeComponent();

        _items = new List<MyClass>();
        _items.Add(new MyClass() { Name = "O" });
        _items.Add(new MyClass() { Name = "P" });
        myList.ItemsSource = _items;
    }

    private void MenuFlyoutItem_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e) {
        // Do stuff with _selectedValue
    }

    private void myList_RightTapped(object sender, Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e) {
        _selectedItem = (e.OriginalSource as FrameworkElement).DataContext as MyClass;
    }

    public class MyClass {

        public string Name { get; set; }

        public override string ToString() => Name;

    }
}

MainPage.xaml:

<Page
    x:Class="UWP.Sandbox.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:UWP.Sandbox"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <ListView x:Name="myList" RightTapped="myList_RightTapped">
            <ListView.ContextFlyout>
                <MenuFlyout x:Name="itemActual">
                    <MenuFlyoutItem Text="see" Click="MenuFlyoutItem_Click"/>
                </MenuFlyout>
            </ListView.ContextFlyout>
        </ListView>
    </Grid>
</Page>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...