2012-02-03 10 views
0

J'ai une fenêtre WPF avec quelques zones de texte, comboboxes et une grille en utilisant MVVM les comboboxes et la grille sont liés à DataTable et DataViews, seules les valeurs de selectedItem sont liées au modèleMVVM liant dataTable & DataView

Comme maintenant, en utilisant des méthodes d'aide comme suit

void GetSelected() 
{ 
    if (SelectedDataRowView != null) 
    obj.prop1 = (int)(SelectedDataRowView.Row["field1"]); 
    else 
    obj.prop1 = defaultValue1; 
    if (SelectedDataRow1 != null) 
    obj.prop2 = (double)(SelectedDataRow["field2"]); 
    if (SelectedDataRow2!= null) 
    obj.prop3 = (string)(SelectedDataRow2["field3"]); 
    ... 
} 

/// and 

void ToSelected() 
{ 
if (TryFindDataRow("field1", obj.prop1, dv1, out drv1) 
    SelectedDataRowView = drv1; 
else 
    SelectedDataRowView = null ; 
    ... 
} 

comme vous pouvez le voir, son assez laid, se demandant comment le nettoyer !!

Pour votre information peut, t utiliser EF & se débarrasser de DataTable/DataView pour l'instant - le db est serveur non sql

+0

Avez-vous regardé 'BindingListCollectionView'? http://msdn.microsoft.com/en-us/library/system.windows.data.bindinglistcollectionview.aspx –

+0

ne ressemble pas MVVM .. –

+0

@jberger c'est la partie non-MVVM :) – Kumar

Répondre

0

Peut-être que vous pouvez convertir vos DataTable/DataRows aux objets POCO avec des interfaces appropriées et les mettre en ObservableCollection qui sont plus compatibles MVVM. Vous pouvez écrire des mappeurs pour y parvenir ou utiliser des frameworks comme AutoMapper. Vous pouvez continuer à utiliser ce que vous faites et utiliser simplement une couche de mappeur pour les convertir d'avant en arrière.

+0

pas familier avec automapper, at-il un support pour mapper datarow/datarowview aux pocos? – Kumar

+0

Il fonctionne principalement avec les conventions, mais vous pouvez le modifier pour prendre en charge vos propres conventions. Vous pouvez même écrire vous-même la partie mapping, mais c'est en grande partie le code standard que AutoMapper peut faire pour vous si l'utilisation de la réflexion est acceptable. Consultez leurs documents et exemples sur le Web. –

Questions connexes