2015-02-24 31 views
1

我在ListView中的GridView中有一個Button。點擊按鈕時,我想從該按鈕的網格視圖的相應行中獲取文本。任何人都可以幫我用這個代碼嗎?從WPF GridViewColumn通過按鈕獲取內容

我的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) 
{ 
} 

回答

1

使用ButtonDataContext,如下圖所示。請注意,在此示例代碼中,我正在使用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> 
+0

作品一種享受!謝謝溫卡爾! – Scotty 2015-02-24 22:01:09