我想在DataGrid
中插入一个超链接并找到一个方法,以便使用MVVM模式实现RequestNavigate
行为。
到目前为止,我已经尝试了很多解决方案,但它们都没有奏效。你能帮帮我吗?
这是我的xaml代码:
<dgWPFCtrl:ExtDataGridTemplateColumn Header="Link to XXX" Width="*">
<dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock >
<Hyperlink NavigateUri="{Binding Path=ID_HTTP_LINK}"
>
<TextBlock Text="{Binding Path=ID_HTTP_LINK}"/>
<i:Interaction.Triggers>
<i:EventTrigger EventName="RequestNavigate">
<WPFCtrl:EventToCommand
PassEventArgsToCommand="True"
Command="{Binding Path=OpenLinkCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Hyperlink>
</TextBlock>
</DataTemplate>
</dgWPFCtrl:ExtDataGridTemplateColumn.CellTemplate>
</dgWPFCtrl:ExtDataGridTemplateColumn>
并遵循相对ICommand
开发:
//Command for open link
RelayCommand _openLinkCommand;
public ICommand OpenLinkCommand
{
get
{
if (_openLinkCommand == null)
_openLinkCommand = new RelayCommand(param =>
{
//Command Body ...
});
return _openLinkCommand;
}
}
我哪里错了?出乎意料的是,ICommand
甚至从未被召唤过!
我也尝试过使用其他类型的活动(例如MouseEnter
),但没有改变!
提前感谢您的贡献,
代比
答案 0 :(得分:11)
Hyperlink的DataContext是DataGridRow表示的对象,而不是ViewModel。因此,您必须使用绑定方法来访问ViewModel(RelativeSource AncestorType或ElementName)。
ElementName(假设您的DataGrid名为&#39; myDataGrid&#39;)
Command="{Binding ElementName=myDataGrid, Path=DataContext.OpenLinkCommand}"
<强>的RelativeSource 强>
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenLinkCommand}"