【问题标题】:How to get binding data back from Hyperlink click event inside a Gridview column如何从 Gridview 列中的超链接单击事件中获取绑定数据
【发布时间】:2023-03-25 18:08:01
【问题描述】:

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

我有一个 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 等)。

【问题讨论】:

  • 在您的列表视图中将SelectedItem 绑定到您的ViewModel 中的一个属性。
  • 我已经在后面的代码中做到了。当我绑定它们时,所有三列都显示数据。但是我想在单击某列中的超链接时检索这些数据。
  • SelectedItem 将保存每一列的ALL数据。

标签: c# .net wpf xaml


【解决方案1】:

首先让我们在你的视图中引用 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>  

或者:

<UserControl.DataContext>
    <vm:MainViewModel/>
</UserControl.DataContext>

在您的 xaml 中,您应该像这样定义列表视图:

<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"); }
}  

此时您已经在 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

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2015-02-01
    • 1970-01-01
    • 2016-11-21
    • 2017-07-01
    • 2016-05-09
    相关资源
    最近更新 更多