gpt4 book ai didi

c# - WPF MVVM 绑定(bind)超链接 RequestNavigate 到 View 模型

转载 作者:太空狗 更新时间:2023-10-29 22:36:26 25 4
gpt4 key购买 nike

在 WPF 窗体上,我有一个超链接,当单击它时,应该会在重定向到内部网页之前聚合数据库中的一些数据。

目前 XAML 看起来如下:

<Hyperlink RequestNavigate="Hyperlink_RequestNavigate" IsEnabled="{Binding CanTakePayment}">
Launch Payments Portal
</Hyperlink>

使用 Hyperlink_RequestNavigate 方法来执行数据库操作,该方法位于 View.xaml.cs

它看起来像:

private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
var transactionReference = GetToken(100M, "13215", "product");
var url = string.Format("{0}New?transactionReference={1}", Settings.Default.PaymentUrlWebsite, transactionReference);
e.Handled = true;
}

我不喜欢这里的这种机制,更愿意将它移到 View 模型中。

我尝试做的是添加到 ViewModel 属性

public ICommand NavigateToTakePayment       
{
get { return _navigateToTakePayment; }
set { _navigateToTakePayment = value; }
}

并在 XAML 中将绑定(bind)更改为

<Hyperlink RequestNavigate="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}"> 
Launch Payments Portal
</Hyperlink>

但它开始给我强制转换异常。

将此机制从 View 转移到 ViewModel 的最合适方法是什么?

最佳答案

HyperLink 有点问题。它不支持命令绑定(bind)。

可以通过附加属性将对命令绑定(bind)的支持硬塞进其中,但只修改一个按钮来做同样的事情会更容易。

<Style TargetType="Button" x:Key="HyperlinkStyledButton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<TextBlock Foreground="DodgerBlue"
Text="{TemplateBinding Content}"
TextDecorations="Underline"
Cursor="Hand" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

然后像这样使用超链接:

<Button Command="{Binding OpenHttpLinkCommand}" Content="www.google.com" 
Style="{StaticResource HyperlinkStyledButton}" ToolTip="Some custom tooltip"/>

假设标准 MVVM 绑定(bind)工作正常:

在 View 模型中:

public ICommand OpenHttpLinkCommand { get; }

在 ViewModel 构造函数中:

this.OpenHttpLinkCommand = new DelegateCommand(this.OnOpenHttpLinkCommand);

以及用链接打开浏览器的命令:

private void OnOpenHttpLinkCommand()
{
try
{
System.Diagnostics.Process.Start("http://www.google.com/");
}
catch (Exception)
{
// TODO: Error.
}
}

关于c# - WPF MVVM 绑定(bind)超链接 RequestNavigate 到 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35864275/

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