我将一个可观察的集合公开为视图模型中的一个属性。observable集合使用数据访问层(linq2sql)中的对象进行加载。
当通过另一个视图模型将新项添加到数据库时,更新可观察集合的最佳方式是什么?我应该用对数据库的查询重新填充observable集合,还是直接将新对象插入到集合中?
此外,我还在尝试如何让一个视图模型与另一个视图模型进行通信,但我使用mvvm只有3天。
发布于 2010-06-17 16:25:19
您可以使用一个全新的类来管理从一个类到另一个类的通知。对于是否加载所有实体或仅添加新添加的实体的问题,它实际上取决于每次加载的可能实体的数量。如果它们非常少,您可以每次重新加载它们,否则只需将新添加的对象添加到集合中。
示例:
class ViewModel1
{
ObservableCollection<Object> entities;
public ViewModel1()
{
EventsManager.ObjectAddedEvent += new EventHandler<ObjectAddedEventArgs>(EventsManager_ObjectAddedEvent);
entities = new ObservableCollection<Object>();
}
void EventsManager_ObjectAddedEvent(object sender, ObjectAddedEventArgs e)
{
entities.Add(e.ObjectAdded);
}
}
class EventsManager
{
public static event EventHandler<ObjectAddedEventArgs> ObjectAddedEvent;
public static void RaiseObjectAddedEvent(Object objectAdded)
{
EventHandler<ObjectAddedEventArgs> temp = ObjectAddedEvent;
if (temp != null)
{
temp(null, new ObjectAddedEventArgs(objectAdded));
}
}
}
class ObjectAddedEventArgs : EventArgs
{
public Object ObjectAdded { get; protected set; }
public ObjectAddedEventArgs(Object objectAdded)
{
ObjectAdded = objectAdded;
}
}
class ViewModel2
{
public void AddObject(Object o)
{
EventsManager.RaiseObjectAddedEvent(o);
}
}
发布于 2010-06-17 16:21:13
无论何时将模型对象保存到数据库中,都会向视图模型发送一条消息,其中包括保存的模型对象。这可以使用Messenger helper class in MVVM Light Toolkit来实现
发布于 2010-06-17 16:25:37
至于第二部分(如何教授视图模型之间的对话),我更倾向于让视图模型尽可能地解耦。因此,Event Aggregation或某种Message Broker似乎是自然而然的选择。
问题的第一部分有点棘手,我不知道正确答案。如果可观察的集合包含数千个项,我会尝试选择一种不涉及完全重构的方法。否则,请尝试您能想到的最简单和最容易的解决方案。
https://stackoverflow.com/questions/3059883
复制相似问题