UWP单击列表视图中的按钮

时间:2018-07-18 04:33:10

标签: c# xaml uwp

我正在尝试在UWP中进行一些基本的UI和绑定,以使自己陷入困境,但是我无法访问列表视图项中的按钮。

我有一个Button,单击它会创建一个新对象,该对象添加到我的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项的索引并使用它来索引ObservableCollection来访问Counter对象。

如何确定添加的ListView项的索引是什么?

1 个答案:

答案 0 :(得分:2)

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

但是,您可以通过Click事件和DataContext来实现自己的目标:

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

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