I've never used a grid without binding it to something.
BUT looking at the underlying reason, that can be solved while still using databinding.
For example:
If you use a ViewModel class for you object that the grid is being bound to, then you can make an aspect of that class be the visibility setters for the various controls.
In the object, you'd have this:
Public ReadOnly Property CheckboxAVisibility As Windows.Visibility
Get
' Do Logic
Return Visiblity
End Get
End Property
And in the XAML you'd do:
<CheckBox IsChecked="{Binding IsBoxAChecked}" Visibility={Binding CheckboxAVisibility}" />
This also makes things easier, as you'll be able to modify the visibility of various controls by modification of other controls within the row (ex: unchecking CheckboxA causes RadioButtons B, C & D to appear).
A second option would be to list just "Header" information in the grid, and when the user double clicks a row, you would display an editor with the editable aspects in a secondary panel or window (similar to how MVC editing works).
edit due to comment
Here's another suggestion, rather than a datagrid, use a StackPanel. For each row you need, you can add a grid panel or stackpanel or something similar, created at runtime according to your rules. For example:
XAML:
<StackPanel Name="stkItems" Orientation="Vertical" />
Code:
Public Sub AddItems(dt as DataTable)
For Each row As DataRow in dt.Rows
Select Case row("Which")
Case 1:
Dim i As New Checkbox
i.Content = "Foo"
i.IsChecked = row("Content")
stkItems.Children.Add(i)
Case 2:
Dim i as New TextBox
i.Text = row("Content")
stkItems.Children.Add(i)
End Select
Next
End Sub
This is highly simplified, and you could do things such as have predefined user controls that you could use, or just build a bunch of controls into a programatically defined container, and then add that to the StackPanel