このコードを持っている:
<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>