通过 Button 从 WPF GridViewColumn 获取内容

Getting content from WPF GridViewColumn through Button

我在 ListView 中的 GridView 中有一个 Button。单击按钮时,我想从该按钮的网格视图的相应行中获取文本。谁能帮我写代码吗?

我的XAML是:

<ListView Name="resultList" ItemsSource="{Binding}" DockPanel.Dock="Top">
 <ListView.View>
  <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Test Results Summary">
   <GridViewColumn DisplayMemberBinding= "{Binding Date}" Header="Date" Width="Auto"/>
    <GridViewColumn DisplayMemberBinding= "{Binding Status}" Header="Status" Width="Auto"/>
     <GridViewColumn Header="" Width="Auto">
      <GridViewColumn.CellTemplate>
       <DataTemplate >
        <Button x:Name="btnRemoveTest" Click="_viewResult" Content="View" Height="20" Width="100"/>
       </DataTemplate>
      </GridViewColumn.CellTemplate>
     </GridViewColumn>
    </GridView>
   </ListView.View>
  </ListView>

我可以在这里做什么:

private void _viewResult(object sender, RoutedEventArgs e)
{
}

使用 DataContextButton,如下所示。请注意,在此示例代码中,我使用的是 Customer。

private void _viewResult(object sender, RoutedEventArgs e)
{
    Button button = sender as Button;
    Customer cust = button.DataContext as Customer;

    string sDate = cust.Date;
    string sStatus = cust.Status;
}

下面是完整的工作代码。

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ListViewButtonClick
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            resultList.ItemsSource = new Customers();
        }
        private void _viewResult(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;
            Customer cust = button.DataContext as Customer;
            string sDate = cust.Date;
            string sStatus = cust.Status;
        }
    }
    public class Customer
    {
        public String Date { get; set; }
        public String Status { get; set; }

        public Customer(String Date, String Status)
        {
            this.Date = Date;
            this.Status = Status;
        }
    }
    public class Customers : ObservableCollection<Customer>
    {
        public Customers()
        {
            Add(new Customer("11/23/2015", "in progress"));
            Add(new Customer("11/24/2015", "Done"));
            Add(new Customer("11/22/2015", "Not yet done")); 
        }
    }
}

MainWindow.xaml

<Window x:Class="ListViewButtonClick.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView Name="resultList"  DockPanel.Dock="Top">
            <ListView.View>
                <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Test Results Summary">
                    <GridViewColumn DisplayMemberBinding= "{Binding Date}" Header="Date" Width="Auto"/>
                    <GridViewColumn DisplayMemberBinding= "{Binding Status}" Header="Status" Width="Auto"/>
                    <GridViewColumn Header="" Width="Auto">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate >
                                <Button x:Name="btnRemoveTest" Click="_viewResult" Content="View" Height="20" Width="100"/>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>