首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否通过重新查询或添加到集合来更新可观察集合?

是否通过重新查询或添加到集合来更新可观察集合?
EN

Stack Overflow用户
提问于 2010-06-17 16:04:40
回答 4查看 1.1K关注 0票数 2

我将一个可观察的集合公开为视图模型中的一个属性。observable集合使用数据访问层(linq2sql)中的对象进行加载。

当通过另一个视图模型将新项添加到数据库时,更新可观察集合的最佳方式是什么?我应该用对数据库的查询重新填充observable集合,还是直接将新对象插入到集合中?

此外,我还在尝试如何让一个视图模型与另一个视图模型进行通信,但我使用mvvm只有3天。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-17 16:25:19

您可以使用一个全新的类来管理从一个类到另一个类的通知。对于是否加载所有实体或仅添加新添加的实体的问题,它实际上取决于每次加载的可能实体的数量。如果它们非常少,您可以每次重新加载它们,否则只需将新添加的对象添加到集合中。

示例:

代码语言:javascript
运行
复制
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);
    }
}
票数 3
EN

Stack Overflow用户

发布于 2010-06-17 16:21:13

无论何时将模型对象保存到数据库中,都会向视图模型发送一条消息,其中包括保存的模型对象。这可以使用Messenger helper class in MVVM Light Toolkit来实现

票数 2
EN

Stack Overflow用户

发布于 2010-06-17 16:25:37

至于第二部分(如何教授视图模型之间的对话),我更倾向于让视图模型尽可能地解耦。因此,Event Aggregation或某种Message Broker似乎是自然而然的选择。

问题的第一部分有点棘手,我不知道正确答案。如果可观察的集合包含数千个项,我会尝试选择一种不涉及完全重构的方法。否则,请尝试您能想到的最简单和最容易的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3059883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档