【问题标题】:RelayCommand Throws InvalidCastExceptionRelayCommand 引发 InvalidCastException
【发布时间】:2016-05-17 18:16:04
【问题描述】:

使用当前版本(5.2.0 版)的 MVVM Light,当使用 Nullable<int>(或 int?)作为参数时,我遇到了调用 MVVM Light RelayCommandGeneric 内部的 Convert.ChangeType 的异常。

问题
当绑定有时绑定到空值,有时绑定到整数时,如何使用Nullable<int> 作为RelayCommand 的命令参数?绑定到不可为空的整数时,我没有看到问题。

背景
我在 CodePlex (issue 7588) 上的问题跟踪器中发现了一个类似的故事,它说它已在 2012 年解决。另外值得注意的是,有一个 pull request 试图解决该问题 - 但似乎该请求不是合并。

【问题讨论】:

  • 两张反对票和零票,这不是一个好的开始......

标签: c# wpf mvvm-light


【解决方案1】:

不是一个真正的答案,但解决此问题的方法是不使用 Nullable<int>,而是仅使用 int 作为通用参数类型,并在 XAML 绑定中提供标记值的 TargetNullValue .然后在执行动作/可以对哨兵值执行动作检查。

在 XAML 中:

<Button Command="MyCommand" 
        CommandParameter="{Binding PathToNullableInt, TargetNullValue=0}" 
        Content="Do Something"/>

然后在视图模型中:

public RelayCommand<int> MyCommand = new RelayCommand<int>((i) =>
{
    if (i != 0)
    {
        DoSomething(i);
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多