DataGrid を使用した WPF アプリケーション。ユーザーがセルをダブルクリックすると、その行の別のセルの値を取得する必要があります。
Dim dep As DependencyObject = DirectCast(e.OriginalSource, DependencyObject)
Dim dgRow As DataGridRow = Nothing
While dep IsNot Nothing
If TypeOf dep Is DataGridRow Then
dgRow = DirectCast(dep, DataGridRow)
End If
dep = VisualTreeHelper.GetParent(dep)
End While
これで行ができたので、特定の列から値を取得したいと思います。
Dim xx As String = dgRow.Item("xx")
これにより、修正オプションなしで「Option Strict Onが遅延バインディングを許可しない」ようになります。Option Strict Off で問題なく動作します。私はそれを修正するために次のすべてを試しました:
dgRow.Item("xx").ToString
DirectCast(dgRow.Item("xx"), String)
CType(dgRow.Item("xx"), String)
ただし、これらすべてのシナリオで、赤い波線は dgRow.Item("xx") の下に残ります。
これについての別の方法を含め、ご意見をお待ちしております。
アップデート
これが最終的に機能したコードです。Item プロパティのタイプを調べたところ、DataRowView でした。以下のマークの回答に感謝します。
dgRow = DirectCast(DirectCast(dep, DataGridRow).Item, DataRowView)
これにより、遅延バインディングエラーなしでこれを行うことができました:
dgRow.Item("xx").ToString