null命令参数引起的空引用异常?

时间:2011-06-15 02:18:48

标签: c# .net wpf xaml .net-4.0

只是一个奇怪的例外,我无法理解

我的代码:

<ListBox Grid.Row="1" Grid.Column="0" Background="{StaticResource ContentBackgroundColour}" BorderThickness="0" Margin="0,3,0,3" ItemsSource="{Binding Path=Scenarios}" HorizontalContentAlignment="Stretch" Padding="0">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding}" HorizontalContentAlignment="Left" Command="{Binding Path=OpenScenario}" CommandParameter="{Binding}"></Button>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

public ICommand OpenScenario
{
    get { return new RelayCommand(param => _OpenScenario((ManageScenarioModel)param), 
        param => ((ManageScenarioModel)param).IsOpen); }
}

private void _OpenScenario(ManageScenarioModel toOpen)
{
    toOpen.IsOpen = true;
    new ManageScenario(this).Show();
}

但是,部分param => ((ManageScenarioModel)param).IsOpen)在启动时会引发空引用异常,有人可以解释一下这是为什么吗?

谢谢, 亚历克斯。

1 个答案:

答案 0 :(得分:1)

因为WPF正在调用“CanExecute”表达式来确定是否应该启用该按钮。显然,您的绑定会导致null命令参数。您应该检查null参数并返回false。

param => (param != null && ((ManageScenarioModel)param).IsOpen)