- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 WPF ListView ,其中包含绑定(bind)到 viewmodel.Ingredients(MVVM 模式)的成分
现在,当我在不同窗口(调用 repository.Save())中添加和保存数据库中的成分时,我希望更新此 ListView 。
(viewmodel.Ingredients 调用 repository.findAll())
我看到了 2 种可能的方法:
1) 使用 MVVM:在 Repository.Save() 中引发属性更改事件。但是然后我需要将存储库注册为我 View 中的第二个数据源,或者做其他会导致我的视图更新的事情。我该如何实现?
2) 另一种方法是使用 MVC 模式从存储库更新(连同 mmvm)然后 View 模型可以实现 IUpdateIngredients 接口(interface)
public interface IUpdateIngredients
void Update()
然后我的存储库有方法:
public void removeHandler(IUpdateIngredients handler)
public void AddHandler(IUpdateIngredients handler)
public void RaiseUpdateEvent() // call Update() on all the handlers
viewmodel 使用 addHandler 方法注册自己。 repository.Save 方法调用 RaiseUpdateEvent();
这会完成工作,但我真的想摆脱 removehandler 方法。 .NET Framework 是否可以通过事件为我完成删除操作?我想摆脱 removeHander 方法,因为我在许多不同的地方重复使用这个 ListView ,有时在弹出窗口中,我想确保我不会忘记在某处调用 removehandler 方法。
谢谢你帮助我!
最佳答案
我有一个类似的问题,我在进行数据库更新的类中使用了一个调解器,将消息发送到其他 ViewModel 以刷新它们的集合。
由于中介将目标 ViewModel 存储为 WeakReferences ,因此无需删除事件处理程序。这是一个很棒的article带有 Josh Smith 关于中介者模式的示例代码……
我根据自己的需要修改了上面文章中的代码,最重要的是 Mediator 是作为单例实现的,就像这样。
private static readonly Lazy<Mediator> _lazy = new Lazy<Mediator>(() => new Mediator());
public static Mediator Instance { get { return _lazy.Value; } }
现在每个 ViewModel 和 broadcaster 都获得了 Mediator 的实例……
public Mediator Mediator
{
get { return Mediator.Instance; }
}
更新数据库的类将消息发送给需要刷新的ViewModel。
Mediator.NotifyColleagues(MediatorMessages.DBUpdated);
ViewModel 在构造函数中注册消息,然后更新集合。
Mediator.Register(MediatorMessages.DBUpdated, new Action(RefreshCollection));
关于c# - 当从不同的窗口调用 repository.save 时,mvvm 更新 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23738753/
在过去的几个月里,我一直在使用 Bzr 对我的项目进行版本控制。我是唯一的开发人员,目前我只有一个本地项目目录中的所有内容,我提交并同步到 DriveHQ。 我现在想到了一些可能会打破这条主线的大规模
我在一个多模块项目中使用 Maven 3.2.3。我想生成一个 checkstyle 和 findbugs 报告,所以我配置了以下内容:
我注意到 Repository 通常通过以下任一方式实现: 方法一 void Add(object obj); void Remove(object obj); object GetBy(int id
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
这是我的设置的详细信息: Gitlab 版本:5.2操作系统:Centos 6.3我在创建新项目 (/projects/new) 时导入现有存储库。 创建了一个新的 EMPTY 项目,但是没有导入存储
我的文件夹结构如下: repo1 | |---file1 |---fold1 | |---file2 |---repo2 | | |---file3 假设我有两
假设我有一个 TeacherRepository,需要根据下面的代码使用 CourseRepository。 Teacher 和 Course 形成多对多的关系。教师和类(class)不形成聚合。您会
我要同样的 repositories我在 buildscript.repositories 中指定的阻止与依赖项相同的存储库 repositories堵塞。请看我的例子: 正常 buidldscrip
是否使用 @EnableJpaRepositories 或 jpa:repositories(在 xml 上)让开发人员不要使用 Spring 的 @Repository 标签?当我查看 Spring
我是 git 和 Github 的新手。我已经了解了很多术语(推送、 pull 、提交、分支等),但我将主要使用通俗的说法来解释我最初的期望。 我假设过程是: 1.) Create a git rep
安装 Nexus Repository Manager OSS 3 后,我没有看到用于通过网页上传工件的选项Artifact Upload。 在 Nexus Repository Manager OS
CMS 和 DMS 有什么区别?两者都存储日期,可以访问数据,它们有什么不同?可以使用 apache Jack Rabbit 代替 Alfresco 吗? 最佳答案 我会根据管理数据的可变性来区分这两
在我的earlier question我问的是如何为使用 EF 等 ORM 框架构建的大型应用程序实现存储库/工作单元模式。 我现在无法解决的一个后续问题是将包含业务逻辑的代码放在哪里,但仍然足够低级
我正在尝试为 nuget git 存储库(我刚刚从中克隆)创建 pull 请求。我已经进行了本地提交。 但是当我尝试创建 pull 请求时,出现以下错误: Could not find any rel
我已经看到了下面的问题。 git diff between cloned and original remote repository 我的问题是如何在 SourceTree 中看到这个差异结果(而不
我在通过 Subversion (SVN) 中的 checkin 自动在 Review Board 中创建新的评论条目时遇到了困难。我创建了一个提交后 Hook ,当手动运行时会出现以下异常: Fai
我在尝试集成 Spring Data 时遇到此错误。完整的堆栈跟踪是 nested exception is org.xml.sax.SAXParseException; systemId: http
通知:https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-repository-email.html 触发器:https://
我正在学习 Laravel 中的存储库设计模式,我正在使用 https://github.com/andersao/l5-repository去做这件事。 但是在我将文件夹 prettus 复制/粘贴
我最近开始了一个使用现有数据库(Oracle)和 MVC 4 的项目。已经进行了很多编码..但是代码中没有“策略”..只有 DB -> ORM -> Controller。因此,我正在尝试为开发添加一
我是一名优秀的程序员,十分优秀!