RelayCommand<bool> 抛出无效转换异常
RelayCommand<bool> throws invalid cast exception
我正在尝试参数化 RelayCommand 但遇到运行时强制转换异常。
以下是相关的 xaml 和视图模型行:
XAML
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="false" />
ViewModel
public RelayCommand<bool> SaveProjectAsRelayCommand { get; set; }
SaveProjectAsRelayCommand = new RelayCommand<bool>(SaveProjectAs, ProjectTaskCanExecute);
private void SaveProjectAs(bool b){...}
private bool ProjectTaskCanExecute(bool b){...}
当我单击“文件”菜单时,GalaSoft 抛出
InvalidCastException ("Specified cast is not valid)
当我从所有内容中删除参数时,工作正常。
我是否必须执行某些操作才能使 "false" 转换为布尔值?
类型转换器必须将其转换为字符串而不是布尔值。
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" >
<MenuItem.CommandParameter>
<x:Boolean>False<x:Boolean>
</MenuItem.CommandParameter>
</MenuItem>
试试上面的方法。您必须在 XAML.
中使用以下名称 space
xmlns:x="clr-namespace:System;assembly=mscorlib"
或者,您可以在 'main' 中创建一个 属性 并绑定到
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="{Binding Main.IsTask}" />
在主虚拟机中,您将拥有
public bool IsTask{get;set;}
我正在尝试参数化 RelayCommand 但遇到运行时强制转换异常。
以下是相关的 xaml 和视图模型行:
XAML
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="false" />
ViewModel
public RelayCommand<bool> SaveProjectAsRelayCommand { get; set; }
SaveProjectAsRelayCommand = new RelayCommand<bool>(SaveProjectAs, ProjectTaskCanExecute);
private void SaveProjectAs(bool b){...}
private bool ProjectTaskCanExecute(bool b){...}
当我单击“文件”菜单时,GalaSoft 抛出
InvalidCastException ("Specified cast is not valid)
当我从所有内容中删除参数时,工作正常。
我是否必须执行某些操作才能使 "false" 转换为布尔值?
类型转换器必须将其转换为字符串而不是布尔值。
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" >
<MenuItem.CommandParameter>
<x:Boolean>False<x:Boolean>
</MenuItem.CommandParameter>
</MenuItem>
试试上面的方法。您必须在 XAML.
中使用以下名称 spacexmlns:x="clr-namespace:System;assembly=mscorlib"
或者,您可以在 'main' 中创建一个 属性 并绑定到
<MenuItem Header="Save Project As" Command="{Binding Main.SaveProjectAsRelayCommand}" CommandParameter="{Binding Main.IsTask}" />
在主虚拟机中,您将拥有
public bool IsTask{get;set;}