2009-10-22 69 views
0

我想知道是否有一种方法调用方法或更新WPF绑定到对象时ViewModel对象上的属性?关于绑定WPF刷新模型

我想这样做的原因是,当我的viewModel对象被创建时,他们的数据模型只包含一个ID,用于在必要时从数据库查询数据。因此,当用户导航到该对象时,我希望视图通知ViewModel对象它正在观看,结果告诉数据模型从数据库更新它的值并将我的ViewModel对象置于加载状态

如果ViewModel对象知道在屏幕上显示时自动更新它们,我可以避免手动刷新所有对象。

谢谢!

回答

2

当WPF绑定到ViewModel中的对象时,它将使用属性getter来获取该值。

这听起来像你正在尝试使用懒评价 - 只是使吸气懒洋洋地从数据库实例的信息:

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

这似乎是一个很好的方法 - 你可以将对象的getter连接到(懒惰地)实例化,因为每个实例第一次被击中。 。 – andyp 2009-10-22 21:07:18

+0

我会给它一个看看它是如何工作的。唯一令我感到害怕的是当你正在调试它时,当你在代码中逐步加载时会自动加载对象,所以它很难知道什么是加载的when。 – HaxElit 2009-10-22 21:38:27

+0

尽管过去我曾多次使用过这种方法,但我不得不承认,我不喜欢模型知道底层存储提供程序类。不幸的是,我还没有想出一个干净而可接受的解决方案。 – Ash 2009-10-23 07:36:06

0

您可以将Selected属性添加到您的ViewModel,该对象在选定对象时会被设置。当选择变为true时,您可以点击数据库。

+0

我想我应该更清楚。 尽管如果我有一个对象时,它可以工作,但我的对象引用了引用其他数据的其他对象等。 因此,我可以手动遍历所有对象并调用刷新,看起来有点痛苦。 任何其他提示? – HaxElit 2009-10-22 20:26:29

+0

在这种情况下,我没有任何真正聪明的想法,对不起:( – 2009-10-22 20:48:16