C# 如何从Gridview列中的超链接单击事件获取绑定数据

C# 如何从Gridview列中的超链接单击事件获取绑定数据,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我的问题是如何使用超链接单击事件从其他列获取绑定数据 我有一个GridView,它显示来自自定义类的数据。GridView包含4列,其中一列有超链接 XML: <ListView Name="CCYVIEW"> <ListView.View> <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors">

我的问题是如何使用超链接单击事件从其他列获取绑定数据

我有一个GridView,它显示来自自定义类的数据。GridView包含4列,其中一列有超链接

XML:

<ListView Name="CCYVIEW">
                <ListView.View>
                    <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="Authors">
                        <GridViewColumn Header="CurrencyName" Width="120" DisplayMemberBinding="{Binding Path=CurrencyName}" />
                        <GridViewColumn Header="CurrencyTitle" Width="122" DisplayMemberBinding="{Binding Path=CurrencyTitle}" />
                        <GridViewColumn Header="BaseCurrency" Width="122" DisplayMemberBinding="{Binding Path=BaseCurrency}" />
                        <GridViewColumn Width="170">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock>
                                     <Hyperlink Foreground="#FFF7CA00" Click="Hyperlink_Click"> Add to market watch</Hyperlink>
                                    </TextBlock>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>

加入市场观察

现在我想要的是当我从第三列或第四列单击超链接时。它应该提供第三列或第四列的所有数据(CurrencyName、Currencytitle等)

首先,让我们在视图中引用ViewModel:

xmlns:vm="clr-namespace:VM;assembly=VM"//you will need to adapt this to the structure of your project.  
现在将其设置为
DataContext

<Window.DataContext>
    <vm:MainViewModel/>
</Window.DataContext>  
此时,您已经在ViewModel中选择了该项,因此让我们转到事件处理程序:

private void Hyperlink_OnClick(object sender, RoutedEventArgs e)
{
    var vm = this.DataContext as MainViewModel;
    vm.SelectedItem;//this is where you now have access to the selected item
}  

现在有一种可能性,您可能没有选择该项,因此您可以只找到单击元素的父元素作为
ListViewItem
,然后获取该元素的
DataContext

在列表视图中将
SelectedItem
绑定到
ViewModel
中的属性。我在后面的代码中完成了这一操作。所有三列都显示了我绑定它们时的数据。但我想在单击某列中的超链接时检索这些数据。
SelectedItem
将保存每列的所有数据。
<ListView Name="CCYVIEW" SelectedItem="{Binding NameOfTheVMProperty}">  
private object _selectedItem;

public object SelectedItem //because you haven't specified the type I am using an object here
{
    get { return _selectedItem; }
    set { _selectedItem = value; OnPropertyChanged("SelectedItem"); }
}  
private void Hyperlink_OnClick(object sender, RoutedEventArgs e)
{
    var vm = this.DataContext as MainViewModel;
    vm.SelectedItem;//this is where you now have access to the selected item
}