当为空时,调试异常绑定到List项

时间:2012-11-09 11:23:10

标签: wpf list xaml exception binding

拥有这段代码:

<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>

1 个答案:

答案 0 :(得分:1)

您可以Style DataTrigger SelectedDispositivos.Count = 0 ContentSetter设置为 null 或其他内容。默认绑定需要移至DataTrigger,因此不会override {{1}}。