我有一个WPF数据网格,它有一些列。其中一个是DataGridHyperlinkColumn。
Datagrid的SelectedItem事件附加到我的视图模型的属性。此属性称为MySelectedItem。
当选择任何行的单元格时,将触发属性设置器。 Setter启动了一个后台工作人员做一些事情。
此属性也从视图模型更新,因此更改将传播到视图。
我遇到的问题是DataGridHyperlinkColumn。我已经将一个事件处理程序附加到超链接,该超链接弹出一个带有消息的自定义wpf窗口。问题出现在这里:当我单击超链接并且先前未选择行时,将触发datagrid selecteditem事件,而不是附加到超链接的事件处理程序。附加到超链接的事件处理程序仅在先前已选择行时才会触发。
我想要的行为是:
查看:
pdu
模型: MySelectedItem属性在下面的视图模型中的某些点内设置。 我不会在这里展示简化。
<Window x:Class="DataGridExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="MainWindow" Height="350" Width="525">
<Grid>
<my:DataGrid x:Name="MyDataGrid"
SelectedItem="{Binding Path=MySelectedItem}"
ItemsSource="{Binding Path=MyListOfItems}"
AutoGenerateColumns="False">
<my:DataGrid.Columns>
<my:DataGridHyperlinkColumn Header="LinkColumn"
Binding="{Binding myExtraData.LinkName}"
ContentBinding="{Binding myExtraData.LinkValue}">
<my:DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="Hyperlink.Click" Handler="OnCellHyperlinkClick" />
</Style>
</my:DataGridHyperlinkColumn.ElementStyle>
</my:DataGridHyperlinkColumn>
</my:DataGrid.Columns>
</my:DataGrid>
</Grid>
</Window>
答案 0 :(得分:1)
您可以处理PreviewMouseLeftButtonDown
事件,而不是处理Hyperlink.Click
事件:
<my:DataGridHyperlinkColumn.ElementStyle>
<Style TargetType="TextBlock">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="OnCellHyperlinkClick" />
</Style>
</my:DataGridHyperlinkColumn.ElementStyle>
private void OnCellHyperlinkClick(object sender, RoutedEventArgs e)
{
e.Handled = true;
//handle the event as before
}