2 votes

Stylisez DataGridTemplateColumn pour correspondre à DataGridComboBoxColumn

MODIFICATION (clarification of requirements)

J'ai un DataGrid comme illustré ci-dessous. Les valeurs de la colonne "Nom du champ pour stocker l'ancien numéro d'employé" changent en fonction de la valeur sélectionnée dans la colonne "Nouvelle règle de numéro d'employé". Pour cela, chaque élément dans le DataGrid ItemsSource a son propre TableNameForOldDataCollection. Je dois me lier à ce TableNameForOldDataCollection et non à une propriété statique qui ne peut pas changer.

Si il existe un moyen de faire cette liaison tout en utilisant DataGridComboBoxTemplate, je préférerais cela. Sinon, je voudrais savoir s'il est possible de mettre en forme le DataGridTemplateColumn/ComboBox pour correspondre à celui du DataGridComboBoxTemplate.

POSTEUR INITIAL

J'ai un scénario où j'utilise DataGridComboBoxColumn pour l'une des colonnes du DataGrid. Dans une autre colonne, j'ai besoin d'utiliser le DataGridTemplateColumn, avec un ComboBox, pour lier correctement à une source dynamique dans le VM.

La DataGridComboBoxColumn ("Nouvelle règle de numéro d'employé") est stylée différemment que le DataGridTemplateColumn, avec un ComboBox ("Nom du champ pour stocker l'ancien numéro d'employé") comme illustré ici:

saisissez une description de l'image ici

Comment puis-je styliser le DataGridTemplateColumn/ComboBox pour correspondre au DataGridComboBoxColumn, en particulier comment le combobox est caché lorsque la cellule réelle n'est pas sélectionnée (comme la deuxième ligne de "Nouvelle règle de numéro d'employé").

MODIFICATION (ajout de code DataGrid):

....

                        ...

0voto

Jose Points 1362

En gardant à l'esprit que DataGridComboBoxColumn n'est pas dans le même arbre visuel, vous pouvez utiliser un BindingProxy:

public class BindingProxy : Freezable
{
    #region Overrides of Freezable

    protected override Freezable CreateInstanceCore()
    {
        return new BindingProxy();
    }

    #endregion

    public object Data
    {
        get { return (object)GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Data. This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DataProperty =
        DependencyProperty.Register("Data", typeof(object), typeof(BindingProxy), new UIPropertyMetadata(null));
}

Resources XAML:

Binding XAML (non présent dans l'arbre visuel):

MISE À JOUR

Solution totalement différente... Un peu bidouilleuse, mais je l'ai testée et cela fonctionne:

            <Setter Property="ItemsSource" Value="{Binding TableNameForOldDataCollection}"/>

Aussi je pense que c'est un duplicate, donc je vais le signaler.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X