Comment puis-je lier Wpf DataGridColumn à un objet?
Je veux lier les colonnes de mon WPF DataGrid à certains objets dans un Dictionnaire comme ceci:
Chemin de liaison=Objets[i]
où les Objets est mon Dictionnaire d'objets, de sorte que chaque cellule représente un élément Object. Comment puis-je le faire?
Je suppose que j'ai besoin de créer un modèle de ma cellule, et je l'ai fait, mais comment faire pour obtenir le résultat de la colonne de liaison dans mon template? Je sais que, par défaut, le contenu d'un DataGridCell est un TextBlock et c'est le Texte de propriété est défini par le biais de la colonne de liaison de suite, mais si le résultat est un objet, je suppose que je dois créer un ContentTemplate. Comment puis-je faire, que les trucs que j'ai essayé n'est pas afficher quoi que ce soit.
Ici, c'est ce que j'ai essayé:
<Style x:Key="CellStyle" TargetType="{x:Type dg:DataGridCell}">
<Setter Property="Template"> ---it should realy be ContentTemplate?
<Setter.Value>
<ControlTemplate>
<controls:DataGridCellControl CurrentObject="{Binding }"/> -- I would expect to get the object like this for this column path : Path=Objects[i] but is not working
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Donc, pour me faire complètement claire, je veux obtenir dans CurrentObject propriété de mon DataGridCellControl l'objet courant que si j'ai mis la liaison de colonne dans ma grille de données comme ceci Path=Objets[i].
Merci pour toute suggestion,
Jean.
OriginalL'auteur | 2009-05-19
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Où dans ItemsSource="{Binding ElementName=window1, Path=Utilisateurs, Mode=TwoWay}"
ElementName est le nom de la Fenêtre dans le code XAML (juste ajouter x:Name="window1" à la Fenêtre de la balise comme avec tout autre contrôlez.
Utilisateurs est une Liste de travaux de même avec Dictionnaire
Mode=TwoWay signifie que si la grille se modifie, la liste deviendra également modifiées, et vice-versa (une liaison bidirectionnelle)
EDIT:
Essayez ceci:
XAML:
C#:
Et d'appeler cette méthode, en vertu de Window_Loaded:
Je ne dis pas que c'est la meilleure solution, mais cela pourrait aider. Laissez-moi savoir.
Oh, et autre chose, je créer mes colonnes dynamiquement, donc j'aurai besoin d'un mondial CellTemplate applicable à toutes les cellules. Aucune idée sur comment puis-je obtenir?
Peut-être vous devriez juste de créer la table de données du dictionnaire et de lier le contrôle datagrid pour que datatable, pense que cela pourrait vous aider?
Je ne suis pas sûr de savoir comment je peux faire ça. Mon scénario est comme suit: Ma source de données est ObservableColection<Object>. L'Objet ressemble à ceci: class Objet { int Col1,Col2,Col3; Dictionnaire<int, OtherColumns> otherColumns; } Maintenant, le otherColumns est dynamicly et peut-être mise à jour à tout moment. Je pense que l'approche que vous initialement proposé avec une ListView aurait fonctionné, je ne suis pas familiers avec ListView, mais je pense que cela peut être de style et utilisé comme une grille de données. Je ne peux pas trouver quelque solution que j'aurais à migrer à la liste. Sur une liste peut être défini un mondial CellTemplate?
Je ne pense pas qu'il y est, je ne l'ai utilisé sous chaque GridViewColumn (GridViewColumn.CellTemplate) comme dans mon exemple. Essayer le code que j'ai mis dans l'édition, je vais étudier un peu plus.
OriginalL'auteur Carlo
J'ai fait quelques classes d'aide afin que je puisse utiliser la grille de données comme une sorte de DataTable. En d'autres termes, je voulais la mise en forme, de tri et de look soigné de la grille de données sans avoir à pré-fab certaines classes à l'avance. La raison principale que je voulais c'était pour une suite de tests, je voulais être en mesure de créer un nombre quelconque de colonnes et au moment de l'exécution. Voici ce que j'ai
Mettre cela ensemble, c'est un exemple d'utilisation:
Et la sortie:
le texte d'alt http://quiteabnormal.com/images/codeSample.jpg
Veuillez noter que la grille de coloration est à partir de modèles universels définie sur la page. Si vous utilisez le GridConstructor.BuildInto() méthode, vous pouvez spécifier une grille que vous avez pré-formaté-vous dans le Mélange ou somesuch.
Juste une chose, le GridConstructor fait quelques hypothèses sur la colonne de paramètres initiaux. Vous pouvez changer de classe pour la rendre plus personnalisable, si vous voulez, mais c'est ce que j'ai besoin si je voulais être en mesure de le faire sans faire d'histoires.
OriginalL'auteur Vassi