UWP单击列表视图中的按钮



我正试图在UWP中进行一些基本的UI和绑定,以使我的头脑清醒,但我在访问列表视图项中的按钮时遇到了问题。

我有一个按钮,点击它,它会创建一个新对象,该对象被添加到我的ObservableCollection中,然后在我的ListView 中添加一个新项目

XMAL

<ListView Grid.Row="1" ItemsSource="{x:Bind counts}" x:Name="buttonsView" Margin="5,0" Background="White" Foreground="#FF5059AB">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Counter">
<StackPanel Orientation="Vertical">
<TextBlock Text="{x:Bind CountValue, Mode=TwoWay}" FontWeight="Black"/>
<Button Click="Increment_Click"  Content="Increment"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>

C#

public class Counter
{
private int count;
public Counter()
{
count = 0;
}
public int CountValue
{
get
{
return count;
}
set
{
count = value;
}
}
}
public sealed partial class MainPage : Page
{
ObservableCollection<Counter> counts = new ObservableCollection<Counter>();
public MainPage()
{
this.InitializeComponent();
}
private void Increment_Click(object sender, RoutedEventArgs e)
{
// ?
}
private void AddCounter_Click(object sender, RoutedEventArgs e)
{
counts.Add(new Counter());
}
}

这很管用。

但是,当我单击StackPanel中的按钮时,会调用Increment_click方法,但我不确定此时该做什么。我想通过获取ListView项的索引来访问Counter对象,并使用该索引来索引ObservableCollection。

如何计算添加的ListView项的索引?

您应该使用CommandCommandParameter而不是事件。然后将Command绑定到在Counter中实现的命令,并将CommandParameter绑定到项(如{Binding}(。

然而,您也可以使用DataContext:通过Click事件来实现您的目标

private void Increment_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
var counter = (Counter)button.DataContext;
//...
}

基本上,除非您另有指定,否则默认情况下DataContext是从父级继承的,因此在本例中,DataContext是当前列表项。

最新更新