在 WPF 窗体上,我有一个超链接,当点击后应该聚合数据库中的一些数据,然后重定向到内部网页。
当前 XAML 如下所示:
<Hyperlink RequestNavigate="Hyperlink_RequestNavigate" IsEnabled="{Binding CanTakePayment}">
Launch Payments Portal
</Hyperlink>
要执行数据库操作,需要使用View.xaml.cs
中的Hyperlink_RequestNavigate
方法。
它看起来像这样:
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;
}
我不喜欢这个机制在这里,希望将其移动到视图模型中。
我的尝试是向视图模型属性添加内容。
public ICommand NavigateToTakePayment
{
get { return _navigateToTakePayment; }
set { _navigateToTakePayment = value; }
}
并且在XAML中将绑定更改为
<Hyperlink RequestNavigate="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}">
Launch Payments Portal
</Hyperlink>
但是它开始给我抛出强制转换异常。
将此机制从View移动到ViewModel的最合适方法是什么?
Command
代替RequestNavigate
。RequestNavigate
是一个事件处理程序,它需要在代码后台实现,而Command
将期望绑定。 - XAMlMAXNavigateToTakePayment
命令?在初始化时才使用setter,UI需要调用getter来调用命令的Execute
方法。希望这样说得清楚,如果不行的话,我会发布一个答案来帮助解释我的评论。 - XAMlMAXWPF
应用程序中使用RelayCommand
。您需要在构造函数中初始化它,然后界面将调用后备字段的Execute(object parameter)
方法。 - XAMlMAXICommand
实现的public void Execute(object parameter)
。谢谢。 - Matas Vaitkevicius