在WPF窗體上,我有一個超鏈接,點擊時應該在重定向到內部網頁之前彙總數據庫中的一些數據。WPF MVVM綁定超鏈接RequestNavigate查看模型
目前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模型。
我試圖做的就是添加到視圖模型屬性
public ICommand NavigateToTakePayment
{
get { return _navigateToTakePayment; }
set { _navigateToTakePayment = value; }
}
和XAML變化結合
<Hyperlink RequestNavigate="{Binding Path=NavigateToTakePayment}" IsEnabled="{Binding CanTakePayment}">
Launch Payments Portal
</Hyperlink>
,但它開始給我投的例外。
什麼是最合適的方式將此機制從視圖移動到ViewModel?
使用'Command'而不是'RequestNavigate'。 RequestNavigate是一個事件處理程序,它將期望代碼落後於實現,而命令將期望綁定。 – XAMlMAX
@XAMlMAX如果我使用命令,它運行良好,並打開窗口沒有錯誤,但是當我點擊鏈接沒有任何反應時,它不會跳入setter。 –
你如何初始化你的'NavigateToTakePayment'命令? setter僅在初始化時使用,UI將調用'getter',因爲它需要調用Command上的Execute方法。希望這是有道理的,如果不是,我會發佈一個答案來幫助我的評論。 – XAMlMAX