【问题标题】:UWP - How to get ListViewItem value with right click or right tapped wihout select none Listviewitem?UWP - 如何通过右键单击或右键点击获取 ListViewItem 值而不选择无 Listviewitem?
【发布时间】:2020-05-30 19:20:42
【问题描述】:

你好,我有一个数据列表(sqlite)加载到列表视图中,如果我选择一个列表视图项并右键单击它,一切正常,但我想在不选择任何列表视图项的情况下获取当前的列表视图项(在指针下)

我想要的是类似于“微软to DO”的应用

我有以下示例代码:

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();

    }

提前致谢

【问题讨论】:

    标签: c# xaml mvvm uwp uwp-xaml


    【解决方案1】:

    我原来的答案不正确,所以我决定编辑它。

    首先,创建一个名为 _selectedValue 的字段,其类型为您的 ListView 的 ItemsSource 项目类型,我将其命名为“MyClass”:

    private MyClass _selectedItem;
    

    然后,注册 ListView 的 RightTapped 事件:

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

    从那里,从RightTappedRoutedEventArgs 获取DataContext:

    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>
    

    【讨论】:

    • 感谢您的回复,请问我应该在“YourType”中做什么让我出现错误?,我如何才能收到“Item 3”的消息,例如在内容中右键单击“Item 3”对话框?
    • YourType 是您的 ListView 的 ItemsSource 中的项目类型。
    • 我有以下问题:Screenshot problem
    • @fausdev 我已经编辑了答案,请看一下。
    • 效果很棒! ?? 非常感谢,我会在我的项目中实现的??
    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2013-08-22
    • 2018-05-30
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多