2010-02-24 4 views
0

J'ai des colonnes définies par l'utilisateur pour ma grille de données, ce qui se résume essentiellement à unRéutiliser mon WPF liaison usine autre code

switch(column_title) 
{ 
case "foo": binding = new Binding("Model.Fonz"); 
//etc. 
} 

et la liaison soit appliquée à la colonne.

Maintenant, j'ai besoin de vider dans csv, avec les colonnes configurées. Comme il peut être une autre colonne ensemble qui sont utilisés dans mon ui et je ne veux certainement pas deux grandes déclarations de pour maintenir, je essentiellement comme une fonction comme ceci:

object GetBoundProperty(object o, System.Windows.Data.Binding binding) 

je ne serai pas surpris si c'est odieusement facile, mais il est en dehors de la gamme de mes connaissances .NET pour le moment et j'ai peu envie d'analyser les périodes hors de la liaison et de chercher à travers la réflexion, sauf si je dois totalement. Merci!

Répondre

1

Permettez-moi de suggérer autre chose. Je n'aime pas l'idée d'obtenir des données du modèle via les liens de données lorsque vous pouvez l'obtenir directement à partir du modèle ... Plutôt que d'avoir deux gros commutateurs, vous pouvez créer une classe par colonne, qui gérera vos demandes de données. En pseudocode, il ressemblera à ceci:

ColumnData fonzColumnData = ColumnsFactory.Create(columnTitle); 

// for bindings: 
Binding binding = fonzColumnData.Binding; 
// for CSV: 
string csvData = fonzColumn.CSVData; 
// ... 
+0

Merci pour la suggestion, probablement une sage voie. Le plus grand obstacle est que j'utilise la même usine pour deux modèles/modèles de vue différents (très similaires) et l'usine s'en fout puisque Binding prend juste une chaîne. Je suppose que ColumnData.CSVData pourrait être un func et c'est probablement le bon moment pour faire une interface pour les deux modèles à partager. Pas la solution de code bas que j'espérais, mais je vais probablement améliorer mon application. – Thomas