我的问题是如何使用超链接单击事件从其他列获取绑定数据?
我有一个 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>
现在我想要的是当我单击第三或第四列的超链接时。它应该给我第三列或第四列(货币名称,货币标题等)的所有数据。
首先,让我们在视图中引用 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
。