只是一个奇怪的例外,我无法理解
我的代码:
<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)
在启动时会引发空引用异常,有人可以解释一下这是为什么吗?
谢谢, 亚历克斯。
答案 0 :(得分:1)
因为WPF正在调用“CanExecute”表达式来确定是否应该启用该按钮。显然,您的绑定会导致null命令参数。您应该检查null参数并返回false。
param => (param != null && ((ManageScenarioModel)param).IsOpen)