从 ListViewItem 单击 UWP 按钮 [英] UWP Button click from ListViewItem
问题描述
我真的希望有更多经验的人能给我一些指点.
I really hope someone with more experience can give me a few pointers.
我对 UWP 项目进行了以下设置:
I have the following setup for a UWP project:
在我的应用程序页面中以 XAML 声明的
ListView
,Tubes.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:
- 当我单击
ListViewItem
时,我希望触发ItemClick
事件.这行得通. - 但是,当我单击
ListViewItem
内的按钮时,我希望在主页内触发不同的事件.
- When I click the
ListViewItem
I want theItemClick
event to be triggered. This works. - 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屋!