ChildWindow bloque les checkbox du Datagrid
Bonjour,
Je travaille avec Visual Studio 2008 et Silverlight 3.
J'ai un Datagrid personnalisé qui comporte plusieurs colonnes : des champs textes basiques, des combobox, des checkbox et des boutons (d'enregistrement).
Pour désactiver certaines cellules du datagrid je binde les propriétés IsEnabled ou IsReadonly grâce aux propriétés d'une classe "Apparence".
Et lorsque l'on clique sur un bouton d'enregistrement, j'affiche une ChildWindow si un champ de la ligne est vide.
- Extrait du XAML du datagrid :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
<data:DataGridTemplateColumn Header="Libellé" Width="100">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Libelle, Mode=TwoWay}" VerticalAlignment="Center" />
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Name="TeB_Libelle" Text="{Binding Libelle, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"
BorderThickness="0" MaxLength="50"
Width ="100" Background="#FFD0E4C3" VerticalAlignment="Center"/>
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTemplateColumn Header="Négatif" Width="30">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding Apparence.NegatifBackColor, Mode=TwoWay}">
<CheckBox x:Name="ChB_Negatif"
IsChecked="{Binding Negatif, Mode=TwoWay}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="ChB_Negatif_Click"
IsEnabled="{Binding Apparence.NegatifIsEnabled, Mode=TwoWay}" />
</Border>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTemplateColumn Header="Autres" Width="30">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding Apparence.AutresBackColor, Mode=TwoWay}" >
<CheckBox x:Name="ChB_Autres_Tiers"
IsChecked="{Binding Apparence.AutresIsChecked, Mode=TwoWay}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="ChB_Autres_Click"
IsEnabled="{Binding Apparence.AutresIsEnabled, Mode=TwoWay}" />
</Border>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn>
<data:DataGridTemplateColumn Header="Enregistrer" Width="65">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel x:Name="Enregistrer" Orientation="Horizontal">
<Button x:Name="Bu_Enregistrer"
VerticalAlignment="Center" HorizontalAlignment="Center"
Width="27" Click="Bu_Enregistrer_Click"
IsEnabled="{Binding Apparence.EnregistrerIsEnabled, Mode=TwoWay}">
<Button.Content>
<Image Name="Im_Enregistrer" VerticalAlignment="Center" HorizontalAlignment="Center"
Source="Resources/Images/Enregistrer.png" Width="16" Height="16" Stretch="Uniform">
</Image>
</Button.Content>
</Button>
</StackPanel>
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
</data:DataGridTemplateColumn> |
- Extrait du code Behind :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| private void Bu_Enregistrer_Click(object sender, RoutedEventArgs e)
{
string lErreur = string.Empty;
// Récupération de la ligne courante
Ligne lLigne = (Ligne)((Button)sender).DataContext;
// Controle de saisie de la ligne courante
lErreur += Controle_Saisie(lLigne);
// Si erreur de saisie
if (lErreur != string.Empty)
{
// Définition du titre du childwindow
lTitre = "Erreur saisie";
// Création et ouverture d'une nouvelle fenêtre d'erreur
ChildWindow lFenetreErreur = new ChildWindow (lTitre, lErreur);
lFenetreErreur.Show();
}
else
{
// Enregistrement
Enregistrer();
}
} |
Pour implémenter cette ChildWindow, j'ai suivi l'exemple de l'article [Silverlight] Utiliser le ChildWindow en Silverlight 3 de Julien Dollon
La ChildWindow s'affiche bien. Les données de son parent sont inaccessibles tant qu'elle est ouverte.
Lorsque ChildWindow est fermée, les checkbox du datagrid conservent leurs valeurs (cochées ou non) mais restent désactivées et il est impossible de les sélectionner.
Auriez-vous une idée de solution ?
Merci d'avance pour votre aide.