2010-04-23 6 views
3

J'ai une question sur un modèle Databinding Silverlight WCF:Quel est un bon motif pour lier une collection d'objets provenant de WCF, dans Silverlight?

Il existe de nombreux exemples sur la façon de lier les données en utilisant des expressions {Binding} dans XAML, comment faire des appels asynchrones à un service WCF, définissez la propriété DataContext d'un élément dans l'interface utilisateur, comment utiliser ObservableCollections et INotifyPropertyChanged, INotifyCollectionChanged et ainsi de suite.

Arrière-plan: J'utilise le modèle MVVM et j'ai un objet Silverlight ItemsControl dont ItemsSource est défini sur une propriété ObservableCollection sur mon objet ViewModel. Ma vue est bien sur le XAML qui a la {Binding}. Supposons que l'objet modèle s'appelle 'Metric'. My ViewModel effectue périodiquement des appels à un service WCF qui renvoie ObservableCollection. MetricInfo est l'objet de transfert de données (DTO).

Ma question est double:

  1. Est-il possible d'éviter la copie de chaque propriété de MetricInfo à la classe modèle - métrique?
  2. Lorsque les appels WCF sont terminés, est-il possible de synchroniser les éléments de mon ObservableCollection local et le résultat de l'appel WCF, sans avoir à effacer tous les éléments de la collection locale, puis ajouter tous ceux du résultat de l'appel WCF?

grâce, Krishna

Répondre

1

1) J'ai fait la mise en correspondance par un constructeur comme celui-ci:

public Metric(MetricInfo metricInfoDTO) 

map puis les propriétés de la DTO à l'entité qui est évidemment ce que vous essayons d'éviter. Oui, c'est un peu de travail mais pour moi ça a très bien fonctionné. L'alternative pourrait être d'utiliser un mappeur d'objet comme AutoMapper

2) Je suppose que vous pourriez avoir une sorte de logique de comparaison pour faire des mises à jour et des insertions dans la collection. Pour moi, j'ai fait le clair et l'ajouter que vous décrivez dans votre question. C'est simple, bref et je n'ai eu aucun problème avec ça.

+0

Merci Dave. Je suis allé avec une certaine logique pour faire des mises à jour/insertions dans la collection locale. J'espérais éviter cela. En regardant tous les échantillons sur le web - vous penseriez que c'est trop simple - mais à la fin, pour des scénarios réels, nous finissons par faire beaucoup plus de plomberie en dépit d'un bon cadre de liaison de données dans Silverlight/WPF. – Krishna