2015-04-07 31 views
0

我想參數化一個RelayCommand但得到一個運行時轉換異常。RelayCommand <bool>拋出無效的轉換異常

下面是有關XAML和視圖模型線:

XAML

<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="false" /> 

視圖模型

public RelayCommand<bool> SaveProjectAsRelayCommand { get; set; } 

SaveProjectAsRelayCommand = new RelayCommand<bool>(SaveProjectAs, ProjectTaskCanExecute); 

private void SaveProjectAs(bool b){...} 
private bool ProjectTaskCanExecute(bool b){...} 

當我點擊文件菜單,GalaSoft拋出

InvalidCastException的(「指定的轉換無效)

當我從一切刪除參數,做工精細。

我需要做些什麼來使「假」被投到布爾?

回答

3

類型轉換器必須將其轉換爲字符串而不是bool。

<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" > 
<MenuItem.CommandParameter> 
     <x:Boolean>False<x:Boolean> 
</MenuItem.CommandParameter> 
</MenuItem> 

嘗試以上操作。您將不得不在XAML中使用以下名稱空間。

xmlns:x="clr-namespace:System;assembly=mscorlib" 
+0

感謝您的快速反應阿迪爾。完美的作品。 –

1

或者,你可以在你的「主」,綁定到

<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="{Binding Main.IsTask}" /> 

在主VM創建一個屬性,你會比有

public bool IsTask{get;set;} 
+0

感謝您的補充。由於只有兩個UI命令會受到這種狀態的影響(bool =「includeExtras」),並且視圖模型中的兩個處理程序最終都會調用業務模型中的相同方法(它採用相同的參數),所以我喜歡擁有它從一開始就作爲呼叫參數進行處理。 –