J'ai un DataGrid standard WPF 4 avec deux colonnes.WPF: DataGrid présentant une erreur de validation sur tous les DataGridTemplateColumns
<DataGrid ItemsSource="{Binding Source={StaticResource ItemDataView}}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Alpha">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Alpha}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Beta">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Beta}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Les objets de données affichés sont définis comme ceci:
public class MyObject : INotifyDataErrorInfo
{
[Required]
public string Alpha { get; set; }
public string Beta { get; set; }
public bool HasErrors
{
get { return string.IsNullOrEmpty(Alpha); }
}
public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
public IEnumerable GetErrors(string propertyName)
{
yield return propertyName;
}
}
dire Alpha doit avoir une valeur non vide, mais Beta peut être nulle.
Si j'ajoute un objet MyObject où la valeur Alpha est vide, alors les deux les cellules Alpha et Beta reçoivent une bordure rouge indiquant une erreur de validation. Cela se produit uniquement pour DataGridTemplateColumns; J'ai essayé d'ajouter un DataGridTextColumn et il n'obtient pas la bordure rouge. La colonne Bêta obtient également une bordure rouge si elle n'est liée à rien, ou même si elle n'a pas de contrôle attaché (par exemple, DataTemplate est vide).
a) Pourquoi cela se produit-il?
b) Comment puis-je l'empêcher? Je veux seulement la bordure de validation rouge sur la cellule avec l'erreur.
votre fonction HasErrors renvoie uniquement une évaluation de Alpha. Ainsi, la cellule bêta ne fera que refléter la condition de la cellule Alpha. –