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)
在启动时抛出了一个空引用异常,有人能解释一下为什么会这样吗?
因为WPF正在调用您的"CanExecute"表达式来确定是否应该启用该按钮。显然,您的绑定导致了一个null命令参数。您可能应该检查一个null参数并返回false。
param => (param != null && ((ManageScenarioModel)param).IsOpen)