Je ne l'ai jamais utilisé une grille sans le liant à quelque chose.
MAIS regardant la raison sous-jacente, qui peut être résolu tout en utilisant la liaison de données. Par exemple: Si vous utilisez une classe ViewModel pour votre objet auquel la grille est liée, vous pouvez faire d'un aspect de cette classe les accesseurs de visibilité pour les différents contrôles.
Dans l'objet, vous auriez ceci:
Public ReadOnly Property CheckboxAVisibility As Windows.Visibility
Get
' Do Logic
Return Visiblity
End Get
End Property
Et dans le XAML que vous feriez:
<CheckBox IsChecked="{Binding IsBoxAChecked}" Visibility={Binding CheckboxAVisibility}" />
Cela rend aussi les choses plus faciles, comme vous serez en mesure de modifier la visibilité des différents contrôles en modifiant d'autres contrôles dans la rangée (ex: en décochant CheckboxA provoque l'apparition de RadioButtons B, C & D). Une deuxième option consisterait à lister uniquement les informations "En-tête" dans la grille, et lorsque l'utilisateur double-clique sur une ligne, vous affichez un éditeur avec les aspects éditables dans un panneau ou une fenêtre secondaire (similaire à la façon dont MVC édite travaux).
modifier en raison de commentaires
Voici une autre suggestion, plutôt que d'un DataGrid, utilisez un StackPanel. Pour chaque ligne dont vous avez besoin, vous pouvez ajouter un panneau de grille ou un panneau de pile ou quelque chose de similaire, créé au moment de l'exécution selon vos règles.Par exemple:
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
Ceci est très simplifié, et vous pourriez faire des choses telles que des contrôles utilisateur prédéfinis que vous pouvez utiliser, ou tout simplement construire une tas de contrôles dans un conteneur défini par programme, puis ajoutez-le au StackPanel
Votre réponse semble plutôt bonne. Je vais faire des tests rapides et, si tout va bien, la prime est à vous! Merci de votre aide! –
Merci pour votre aide Alex! La générosité est à vous. –
Glad cela vous a aidé. – alex2k8