从 ListViewItem 单击 UWP 按钮 [英] UWP Button click from ListViewItem

查看:22
本文介绍了从 ListViewItem 单击 UWP 按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的希望有更多经验的人能给我一些指点.

I really hope someone with more experience can give me a few pointers.

我对 UWP 项目进行了以下设置:

I have the following setup for a UWP project:

  • 在我的应用程序页面中以 XAML 声明的 ListViewTubes.xaml:

<ListView Name="TubesGrid"
              ItemsSource="{x:Bind TubeItems, Mode=TwoWay}"
              ItemTemplateSelector="{StaticResource TubeTemplateSelector}"
              IsItemClickEnabled="True"
              ItemClick="TubesGrid_ItemClick"
              SelectionChanged="TubesGrid_SelectionChanged">

  • 一个 UserControl 作为 ListViewItem (UserControl.Resources) 的模板:

  • A UserControl as a template for the ListViewItem (UserControl.Resources):

    <local:TubeTemplateSelector x:Key="TubeTemplateSelector"
                                TubeTemplate="{StaticResource TubeTemplate}">
    </local:TubeTemplateSelector>
    <DataTemplate x:Key="TubeTemplate" x:DataType="data:Tube">
        <local:TubeTemplate HorizontalAlignment="Stretch" VerticalAlignment="Stretch" FavoritesNumber="{x:Bind SpaceLength, Mode=OneWay}"></local:TubeTemplate>
    </DataTemplate> 
    

  • TubeTemplate 里面,我有一个按钮,在其他视图旁边:

  • Inside the TubeTemplate I have a button, beside other views:

    <Button Name="RemoveTube"
            Click="RemoveTube_Click"
        <Image
                Source="../Assets/xIcon.png"
                Stretch="None">
        </Image>
    </Button>
    

  • 我正在努力实现的目标:

  • What I'm trying to achieve:

    1. 当我单击 ListViewItem 时,我希望触发 ItemClick 事件.这行得通.
    2. 但是,当我单击 ListViewItem 内的按钮时,我希望在主页内触发不同的事件.
    1. When I click the ListViewItem I want the ItemClick event to be triggered. This works.
    2. But when I click on the Button that's inside the ListViewItem I want a different event to be triggered inside the main page.

  • 这个想法是点击一个项目来选择它,但是当我点击项目内的按钮时,我想要删除该项目.

    The idea is to click on an item to select it, but when I click the button inside the item, I want that item to be removed.

    我有哪些选择?

    推荐答案

    如果看起来是在不使用视图模型的情况下执行此操作,那么您可以向 TubeTemplate 控件添加一个事件.

    If looks like are doing this without using viewmodels, then you could add an event to the TubeTemplate control.

     public event EventHandler Closed;
    

    当关闭按钮被点击时,您将触发该事件.

    When the close button is clicked, you would fire the event.

    private void RemoveTube_Click(object sender, RoutedEventArgs e)
    {
        Closed?.Invoke(this, EventArgs.Empty); // Even better would be to give the item clicked (the data context)
    }
    

    然后,您可以在 MainPage 中订阅该事件.

    Then, from within your MainPage you could subscribe to the event.

    <local:TubeTemplate HorizontalAlignment="Stretch" 
                        VerticalAlignment="Stretch" 
                        Closed="TubeTemplate_Closed">
    
    </local:TubeTemplate>
    

    TubeTemplate_Closed 方法中,您可以移除点击的项目.

    In the TubeTemplate_Closed method, you could remove the item clicked.

    private void TubeTemplate_Closed(object sender, EventArgs e)
    {
        var element = (FrameworkElement)sender;
        var tube = (Tube)element.DataContext;
    
        TubeItems.Remove(tube);
    }
    

    这篇关于从 ListViewItem 单击 UWP 按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆