0

有这段代码:

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

1 回答 1

1

您可以将 aStyle设置为null其他内容DataTrigger。默认绑定需要移动到 a ,这样它就不会覆盖.SelectedDispositivos.Count = 0ContentSetterDataTrigger

于 2012-11-09T11:31:37.833 回答