Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ViewModels上发布更新?

在ViewModels上发布更新?
EN

Stack Overflow用户
提问于 2012-01-25 03:32:29
回答 2查看 116关注 0票数 1

以下是我的WPF应用程序的模型的简化版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Employee
  +Name:string

Client
  +Name:string
  +PhoneNumber:string

Appointment
  +Employee:Employee
  +Client:Client
  +DateAndTime:DateTime

我的应用程序有几个用TabControl组织的主页。每个TabItem都有一个关联的视图和ViewModel。在一个页面上,有一个显示所有约会的DataGrid,其中包含几个特定的详细信息,比如客户的电话号码。每隔一页,就会有另一个DataGrid显示所有客户端。这些DataGrids绑定到不同的ViewModels,因为它们在不同的页面上。我的ViewModels仅仅作为实现INotifyPropertyChange的模型的包装器来实现。

还有一个问题:如果用户在第二个页面上修改了客户的电话号码,那么该页面的ViewModel就会正确地更新(并通过它更新模型),但是第一个页面的ViewModel不会被通知发生了更改。当我返回到第一页时,屏幕上显示的与该客户的任何约会仍然显示旧的电话号码,直到我执行了导致该ViewModel更新的操作。

我该如何解决这个问题?是否应该在页面之间共享公共ViewModel?模型是否应该在发生更改时以某种方式通知所有ViewModels (模型当前对ViewModels一无所知)?这是我的第一个MVVM项目,所以我不知道该怎么做。

更复杂的是,在我的第一个页面上,我使用了一个日历控件,并使用它的SelectedDate属性来确定要显示哪些约会。因此,该页面的ViewModel必须保留自己的缓存约会列表,每当SelectedDate更改或添加或删除约会时,它都会更新该列表。

谢谢你在这方面的帮助。

EN

回答 2

Stack Overflow用户

发布于 2012-01-25 03:53:54

你可能想要一些消息,通知和监听器等等。有很多方法可以做到这一点,看看MVVM Light,它有一个内置的方法,这篇文章有一个使用的例子……

http://blog.galasoft.ch/archive/2009/10/18/clean-shutdown-in-silverlight-and-wpf-applications.aspx

票数 0
EN

Stack Overflow用户

发布于 2012-01-25 06:03:18

模型永远不应该知道ViewModel,就像ViewModel永远不应该知道视图一样。

如果您不能引入MVVM Light或其他框架,那么可以在模型上放置一个事件(或者让它实现INotifyPropertyChanged),然后ViewModel可以订阅该事件并引发它自己的PropertyChanged事件。

只需确保当ViewModel离开作用域时,它会取消订阅模型。

这样做的原因是因为您没有让模型直接意识到ViewModel。您只是允许Model大喊“嘿,伙计,我改变了!”。然后,任何监听的人都可以在不违反任何模式的情况下采取适当的行动,而且由于ViewModels被允许关注模型,所以这是可行的。

如果五个不同的ViewModels被订阅并连接到不同的视图,但是关注相同的模型,那么它们都会得到更新。

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

https://stackoverflow.com/questions/8997508

复制
相关文章
利用 Resetter 将 Ubuntu 系发行版重置为初始状态
这个 Resetter 工具可以将 Ubuntu、 Linux Mint (以及其它基于 Ubuntu 的发行版)返回到其初始配置。
会长君
2023/04/26
1.3K0
类变量与对象变量
# 类变量与对象变量 # 代码 # coding=UTF-8,类变量与对象变量 class Robot: """表示有一个带有名字的机器人。""" # 一个类变量,用来计数机器人的数量 population = 0 # 这是一个类变量,属于Robot类 def __init__(self, name): # name变量属于一个对象(通过self分配),因此它是一个对象变量 """初始化数据""" self.name = name
benym
2022/07/14
9280
Python面向对象编程-类和对象-实例变量和类变量
实例变量是指属于特定对象的变量。每个类的实例都具有自己的实例变量,它们的值可以不同。在上面的示例中,Person 类的 name 和 age 属性都是实例变量,因为它们属于特定的 Person 对象。
玖叁叁
2023/04/19
8470
C++自定义类的对象对于其私有变量的访问
以下语法规则是不言自明的: 在自定义类A的成员函数中,可以对该类的私有成员变量进行赋值等操作,但是在类定义之外所声明的A类的对象aobj是不可以直接访问A类的私有变量的,只有通过在A类的成员函数中开放访问其私有变量的接口,对象aobj才可以对私有变量进行操作。
大忽悠爱学习
2021/11/15
1.5K0
C++ 类成员变量初始化
本文是对《Effective C++》的”Item 4: Make sure that objects are initialized before they’re used”的笔记和验证。
零式的天空
2022/03/08
9470
C++ 类成员变量初始化
本文是对《Effective C++》的”Item 4: Make sure that objects are initialized before they’re used”的笔记和验证。
mzlogin
2020/04/14
2.3K0
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
" 匿名对象 " 的 作用域 仅限于其所在的 表达式 , 这句表达式 执行完毕后 , 匿名对象 自动销毁 ;
韩曙亮
2023/10/15
3960
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
使用 class 关键字 , 定义 Dart 类 , 所有的 Dart 类默认继承 Object 类 , 其中定义两个变量 , 定义一个标准的构造方法 , 构造方法中使用 this.name 表示自有参数 ;
韩曙亮
2023/03/28
2K0
C++_类型&变量&类和对象
数据类型(type) 简称类型 是具有相同特征的数据的集合,是一个抽象概念 C++的数据类型主要分为三种: 原始数据类型:内置或预定义的数据类型,用户可以直接使用它们声明变量。例如:int,char,float,bool等 整数、字符、布尔型、浮点、双浮点数、void、宽字符 等 派生数据类型:从原始或内置数据类型派生的数据类型 函数 数组 指针 引用 用户自定义类型:这些数据类型由用户自己定义 类 结构体 union:在并集中,所有成员共享相同的内存位置 枚举类型 typedef:为 复杂的声明 定义 简
用户10551528
2023/05/09
3630
C++_类型&变量&类和对象
java类和对象——变量赋值方法
此处的set和get的方法可以用 atl + insert 选择Getter and Setting实现
小雨的分享社区
2022/10/26
1.1K0
Python 面向对象编程:类、对象、初始化和方法详解
Python 是一种面向对象的编程语言。在 Python 中,几乎所有东西都是对象,都具有其属性和方法。
小万哥
2023/10/25
3710
Python 面向对象编程:类、对象、初始化和方法详解
关于类的对象创建与初始化
今天,我们就来解决一个问题,一个类实例究竟要经过多少个步骤才能被创建出来,也就是下面这行代码的背后,JVM 做了哪些事情? Object obj = new Object(); 当虚拟机接受到一条 new 指令时,首先会拿指令后的参数,也就是我们类的符号引用,于方法区中进行检查,看是否该类已经被加载,如果没有则需要先进行该类的加载操作。 一旦该类已经被加载,那么虚拟机会根据类型信息在堆中分配该类对象所需要的内存空间,然后返回该对象在堆中的引用地址。 一般而言,虚拟机会在 new 指令执行结束后,显式调
Single
2018/04/17
8230
关于类的对象创建与初始化
关于类的对象创建与初始化
今天,我们就来解决一个问题,一个类实例究竟要经过多少个步骤才能被创建出来,也就是下面这行代码的背后,JVM 做了哪些事情?
Single
2018/04/10
1.7K4
关于类的对象创建与初始化
vector>初始化_vector如何重置
注意:vector<int> a(nums.begin()+1, nums.end()-2);中a包含nums.begin()+1,不包含nums.end()-2,也就是包含的区间是左闭右开区间
全栈程序员站长
2022/09/29
8870
Mysql重置初始密码的方法
以下命令行代码均在管理员模式下操作 命令行exe文件目录:C:\Windows\System32\cmd.exe -> 右键 -> 以"管理员模式运行"
红目香薰
2022/11/29
2.5K0
Mysql重置初始密码的方法
Xcode 恢复初始状态
我想问题可以是出在最新的 Xcode 11.2.1 版本上,我先下载一个 Xcode 10.3 版本看看能不能运行。
iOSDevLog
2019/12/02
2.4K0
以呼叫中心为例解释如何将有状态设计转换成无状态设计?
在日常开发中,我们经常会到"有状态"服务设计与"无状态"服务设计,何谓“无状态”?
菩提树下的杨过
2020/12/08
1.4K0
python--初始面向对象:类的相关知识,对象的相关知识
当然很简单,两个角色,1个人物,1个boss,且人物和boss都有不同的技能,比如人物用觉醒技能秒了boss,掉了xx装备,boss用大招秒了人物,人物死亡,怎么描述这种不同的人物和他们的功能呢
py3study
2018/08/02
4100
Python面向对象中的类变量,实例变量怎么来理解?
前几天在Python最强王者交流群有个叫【Chloe】的粉丝问了一个类变量和实例变量的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
1.7K0
Python面向对象中的类变量,实例变量怎么来理解?
点击加载更多

相似问题

如何将列表重置为其初始状态

10

如何将所有变量重置为初始状态?

22

如何将react通量存储重置为其初始状态?

14

如何将远程git分支重置为其初始状态

213

将对象重置为初始状态

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文