[Wpf] Comment lier des données à DataGridComboBoxColumn dans DataGrid à l'aide de MVVM


Answers

En plus de lier votre SelectedItem, je suppose que votre propriété SelectedLifeArea n'est pas obtenue directement à partir de LifeAreaList, donc lorsque vous comparez les deux valeurs, elles retournent false, même si le nom et l'id correspondent. Vous devez probablement remplacer la fonction .Equals de l'objet LifeArea pour renvoyer true si les ID des deux objets correspondent

public override bool Equals(object obj)
{
    if (obj is LifeArea)
    {
        return this.Id == (obj as LifeArea).Id;
    }
    return false;
}
Question

Ça me rend fou. J'ai un DataGrid qui a un DataGridComboBoxColumn que je veux que l'utilisateur puisse employer pour choisir. C'est le contour de base de ma grille.

<DataGrid ItemsSource="{Binding GoalList}" DockPanel.Dock="Bottom" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridComboBoxColumn ItemsSource="{Binding LifeAreaList}" Header="Life Area"/>
<DataGrid.Columns>
</DataGrid>

Le DataGrid est lié à une collection d'objets de type Goal. Chaque objectif a une propriété de type LifeArea. Chaque LifeArea a les propriétés LifeAreaId et Name.

Le contexte de données contient une collection observable de buts: GoalList et une liste de zones de vie: LifeAreaList. Je veux que l'utilisateur puisse sélectionner une zone de vie différente pour un objectif. Le nom de la zone de vie doit également être la valeur affichée.

MODIFIER

La solution est que le ItemsSource pour le DataGridComboBoxColumn doit être défini comme une ressource statique. Une autre option consiste à définir le ItemsSource à travers le code.

En fin de compte j'ai:

<DataGridComboBoxColumn x:Name="_lifeAreaComboBoxColumn" SelectedItemBinding="{Binding LifeArea}" DisplayMemberPath="Name" Header="Life Area">

Dans le code derrière je définis la ItemsSource:

_lifeAreaComboBoxColumn.ItemsSource = LifeAreaDAL.GetLifeAreas();

Quand j'ai une chance, je vais convertir cela en une ressource statique.