2009-10-22 10 views
0

Je me demandais s'il y avait un moyen d'appeler une méthode ou de mettre à jour une propriété sur mon objet ViewModel lorsque WPF se lie à l'objet?WPF Refresh Modèle sur la liaison

La raison pour laquelle je veux faire cela est que lorsque mes objets viewModel sont créés, leur modèle de données contient uniquement un ID qui est utilisé pour interroger des données de la base de données si nécessaire. Ainsi, lorsque l'utilisateur accède à cet objet, je veux que la vue avertisse l'objet ViewModel qu'il est surveillé et que le modèle de données mette à jour ses valeurs dans la base de données et mette mon objet ViewModel dans un état de chargement

les objets ViewModel savaient se mettre à jour quand ils étaient affichés à l'écran, je pourrais éviter d'avoir à rafraîchir manuellement tous les objets.

Merci!

Répondre

2

Lorsque WPF se lie à l'objet dans votre ViewModel, il va utiliser les propriétés getter pour récupérer la valeur.

On dirait que vous essayez d'utiliser l'évaluation paresseuse - juste faire le getter paresseusement instancier les informations de la DB:

private int entityId; // Set in advance 
private Entity entityToFetch; // Will be fetched lazily 

public Entity EntityToFetch 
{ 
    get 
    { 
     if (this.entityToFetch == null) // || this.entityToFetch.Id != this.entityId) - add this if you're letting this change at runtime... 
     { 
      this.entityToFetch = DataAccessLayer.FetchEntityForId(this.entityId); 
     } 

     return this.entityToFetch; 
    } 
} 
+0

Cela semble être un bon moyen d'aller - vous pouvez chaîner vos getters sur vos objets instancier (paresseusement) que chaque occurrence est frappée pour la première fois. – andyp

+0

Je vais essayer et voir comment cela fonctionne La seule chose qui me fait peur à ce sujet est quand vous déboguez, il charge automatiquement les objets que vous passez par le code, donc il est très difficile de savoir ce qui s'est chargé – HaxElit

+0

Bien que j'aie utilisé cette méthode plusieurs fois par le passé, je dois admettre que je n'aime pas que le modèle connaisse les classes de fournisseurs de stockage sous-jacentes, mais je n'ai pas encore trouvé de solution propre et acceptable. – Ash

0

Vous pouvez ajouter une propriété Selected à votre ViewModel qui est définie lorsque l'objet est sélectionné. Lorsque Selected devient true, vous pouvez accéder à votre base de données.

+0

Je suppose que je devrais avoir été plus clair. Alors que cela fonctionne si j'ai un seul objet, mes objets référencent d'autres objets qui référencent d'autres données, etc. Donc, je peux parcourir tous les objets manuellement et appeler un rafraîchissement sur eux, il semble assez douloureux. D'autres astuces? – HaxElit

+0

Dans ce cas, je n'ai pas d'idées vraiment brillantes, désolé :( –