有这段代码:
<ContentControl
Content="{Binding SelectedDispositivos[0]}"
ContentTemplate="{StaticResource DispositivoInfoViewTemplate}">
</ContentControl>
SelectedDispositivos 是绑定到 DataGrid SelectedItems 属性的项目列表。该列表可以为空,因此它会引发如下异常:
System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'DispositivoViewModel')
from 'SelectedDispositivos' (type 'ObservableCollection`1').
BindingExpression:Path=SelectedDispositivos[0]; DataItem='DispositivosViewModel'
(HashCode=45398538); target element is 'ContentControl' (Name=''); target property is
'Content' (type 'Object')
ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: El argumento
especificado está fuera del intervalo de valores válidos.
Nombre del parámetro: index'
它只发生在调试模式下的结果窗口中,并且应用程序继续运行而没有问题。无论如何,异常是异常,所以我想知道是否有一种简单的方法来修复它,而 ViewModel 中没有另一个变量来公开 FirstSelectedItem 或类似的东西。
编辑:
即使用 DataTriggers 来处理它,它也会抛出相同的绑定错误。我删除了 DataTrigger Content setter,问题就消失了,以确保问题存在:
<ContentControl
ContentTemplate="{StaticResource DispositivoInfoViewTemplate}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Content" Value="{x:Null}" />
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedDispositivos.Count}" Value="1">
<Setter Property="Visibility" Value="Visible" />
<Setter Property="Content" Value="{Binding SelectedDispositivos[0]}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>