拥有这段代码:
<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内容设置器并且问题已经消失,以确保存在问题:
<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>
答案 0 :(得分:1)
您可以Style
DataTrigger
SelectedDispositivos.Count = 0
Content
将Setter
设置为 null 或其他内容。默认绑定需要移至DataTrigger
,因此不会override {{1}}。