gpt4 book ai didi

wpf - 在 MVVM 模式中使用超链接的单元格模板

转载 作者:行者123 更新时间:2023-12-03 04:11:27 28 4
gpt4 key购买 nike

我尝试在 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),但没有任何改变!

预先感谢您的贡献,

黛比

最佳答案

超链接的 DataContext 是 DataGridRow 表示的对象的 DataContext,而不是 ViewModel。因此,您必须使用绑定(bind)方法来访问该 ViewModel(RelativeSource AncestorType 或 ElementName)。

ElementName(假设您的 DataGrid 名为“myDataGrid”)

Command="{Binding ElementName=myDataGrid, Path=DataContext.OpenLinkCommand}"

相对来源

Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenLinkCommand}"

关于wpf - 在 MVVM 模式中使用超链接的单元格模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com