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 セッターを削除しましたが、問題はなくなりました。

<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

nullまたは他の何かに設定StyleするDataTriggeronを持つことができます。をオーバーライドしないように、デフォルトのバインディングを に移動する必要があります。SelectedDispositivos.Count = 0ContentSetterDataTrigger

于 2012-11-09T11:31:37.833 に答える