Я никогда не использовал сетку, не привязывая ее к чему-либо.
НО с учетом основной причины, которая может быть решена при использовании привязки данных.
Например:
Если вы используете класс ViewModel для своего объекта, к которому привязана сетка, то вы можете сделать аспект этого класса установщиками видимости для различных элементов управления.
В объекте у вас будет это:
Public ReadOnly Property CheckboxAVisibility As Windows.Visibility
Get
' Do Logic
Return Visiblity
End Get
End Property
А в XAML вы бы сделали:
<CheckBox IsChecked="{Binding IsBoxAChecked}" Visibility={Binding CheckboxAVisibility}" />
Это также облегчает задачу, так как вы сможете изменять видимость различных элементов управления путем изменения других элементов управления в строке (например, снятие флажка с флажка A приводит к появлению кнопок RadioButton B, C & D).
Второй вариант - перечислить в сетке только информацию «Заголовок», и когда пользователь дважды щелкает строку, вы отображаете редактор с редактируемыми аспектами на дополнительной панели или в окне (аналогично тому, как работает редактирование MVC). ).
редактировать из-за комментария
Вот еще одно предложение, а не сетка данных, использовать StackPanel. Для каждой нужной строки вы можете добавить панель сетки или панель стека или что-то подобное, созданное во время выполнения в соответствии с вашими правилами. Например:
XAML:
<StackPanel Name="stkItems" Orientation="Vertical" />
Код:
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
Это очень упрощено, и вы могли бы делать такие вещи, как предопределенные пользовательские элементы управления, которые вы могли бы использовать, или просто собрать группу элементов управления в программно определенный контейнер, а затем добавить это в StackPanel