Null命令参数导致的Null引用异常

本文关键字:Null 引用 异常 命令 参数 | 更新日期: 2023-09-27 17:59:05

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

我的代码:

<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)在启动时抛出了一个空引用异常,有人能解释一下为什么会这样吗?

Null命令参数导致的Null引用异常

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

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