MVVM 层次结构中的更改通知

2024-04-22

假设在某个抽象 ViewModel 基类中,我有一个普通的旧属性,如下所示:

public Size Size
{
    get { return _size; }
    set
    {
        _size = value;
        OnPropertyChanged("Size");
    }
}

然后,我创建一个更具体的 ViewModel,继承前一个视图模型,其中包含以下属性:

public Rect Rectangle
{
    get { return new Rect(0, 0, _size.Width, _size.Height); }
}

现在,在某些 View 类中,我绑定到上述 ViewModelRectangle财产。一切正常,直到我改变尺寸。什么时候Size变化,Rectangle不知道这一点,并且更改不会传播到视图。自从Rectangle在子类中,我不能简单地添加一个OnPropertyChanged("Rectangle") to the Size setter.

现在想象一下我有许多不同的属性,例如Rectangle,所有这些都依赖于基类属性,并且这些更改都不会被传播。我需要一种轻量级且优雅的方式来链接更改通知,最好是不需要大量代码并且不会强迫我使用依赖属性的方式。

显然这里有很多丑陋的解决方案——我正在寻找的是干净而聪明的东西。在我看来,这将是一个非常常见的情况,而且在我看来,可能有一个MVVM 友好这样做的方法。


我最近在博客中讨论了这个确切的问题。我包括一个[DependsUpon("Size")]属性与矩形。我真的很喜欢这种方法,因为它将依赖关系知识与创建依赖关系的代码一起保留,而不是相反。

看一看:http://houseofbilz.com/archive/2009/11/14/adventures-in-mvvm----dependant-properties-with-inotifypropertychanged.aspx http://houseofbilz.com/archive/2009/11/14/adventures-in-mvvm----dependant-properties-with-inotifypropertychanged.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVM 层次结构中的更改通知 的相关文章

  • WPF - 从 UserControl 发出命令时 CanExecute 不会触发

    我有一个按钮条用户控件 我想在我的大多数表单上使用它 我添加了如下命令 public ICommand Create get return buttonCreate Command set buttonCreate Command valu
  • 对话框结果 WPF

    我正在读一本书 上面写着 而不是设置 DialogResult 用户点击后手动 按钮 您可以将按钮指定为 接受按钮 通过设置 是默认为true 点击那个 按钮自动设置 窗口的DialogResult为true 同样 你可以指定一个按钮 作为
  • WPF 图片库

    我将驱动一个需要向用户呈现图像组的触摸屏应用程序 不是网络应用程序 我们的愿望是呈现具有页面前进 后退功能的 3x3 图像网格 他们可以选择一些 我将只展示这些图像 我没看到ListView完全符合我的要求 尽管 WPF 足够大 我很可能错
  • 更改 WPF Toolkit 图表中绘图区域和标题周围的边距

    我正在使用 WPF Toolkit 2010 年 2 月版本的 Chart 控件 图表相对于绘图区域占用了大量空间 如何控制绘图区域和图表标题周围的边距 这样 我可以将我需要的 10 个图表排列在网格中 而无需在屏幕上使用太多空间 Than
  • RenderTargetBitmap 内存泄漏

    我正在尝试使用 RenderTargetBitmap 渲染图像 每次我从 RenderTargetBitmap 创建一个实例来渲染图像时 内存都会增加 完成后内存永远不会释放 这是代码 RenderTargetBitmap rtb new
  • 旋转后获取线的新位置

    我需要在一条线上使用 RotateTransform 方法找到旋转后线的新坐标 例如 在这一行之后 line RenderTransform new RotateTransform 25 0 0 line X1其他三个属性不会改变 我找到了
  • 将按钮控件嵌入到现有 Direct3D 应用程序中

    我想将自己的内容覆盖在 Direct3D v9 游戏 由第三方制作 之上 叠加互动按钮 具体来说 我想覆盖一个可点击的按钮控件 就像 Steam 所做的那样 尽管我正在尝试一个更简单的界面 理想情况下 我能够覆盖 WPF 按钮或 Windo
  • WPF 应用程序在每个系统规模上具有相同的大小(与规模无关)

    有没有办法让 WPF 应用程序在每个系统规模上获得相同的大小 当我改变时更改文本 应用程序和其他项目的大小在windows系统设置中125 推荐 to 100 在全高清屏幕中 我的 WPF 应用程序变得太小 为了实现独立的系统缩放应用程序
  • 执行命令不会在后面的资源字典代码中触发

    我已经为其创建了资源字典和代码隐藏文件 在 XAML 中 我定义了命令绑定并添加了执行处理程序
  • Trace.Assert 没有中断,也不显示消息框

    我有一个 WPF 应用程序 我在其中在画布上移动数据 当我像怪物一样尝试用鼠标移动数据时 问题就开始了 以下是操作的顺序 画布上的 MouseMove 被触发 在 MouseMove 中 我更改了一些数据 Trace Assert 失败 调
  • 为什么人们在 ICommand 上使用 CommandManager.InvalidateRequerySuggested()?

    我正在制作自己的一些自定义 ICommand 实现 我看到很多实现都是这样的 public event EventHandler CanExecuteChanged add CommandManager RequerySuggested v
  • 在单独的线程上显示 WPF-“NotifyIcon”

    我目前正在开发一个 Office 加载项 我需要显示一个显示进度的通知对话框 我正在使用Philipp Sumi 的 wpf notifyicon http www codeproject com Articles 36468 WPF No
  • 数据绑定的 IntelliSense 不起作用

    经过几个小时尝试调试由错误的属性引起的数据绑定问题Binding扩大 一旦我注意到这个错误 我就会意识到如果 IntelliSense 可用 我可能一开始就不会犯这个错误 作为一个习惯在错误输入名称时出现错误 警告的 Visual Stud
  • 如何使TabTip.exe窗口弹出时最大化

    我想使用以下代码弹出虚拟键盘 var info new ProcessStartInfo C Program Files Common Files Microsoft Shared ink TabTip exe info WindowSty
  • 允许 WPF Web 浏览器中的弹出窗口

    有没有办法允许在嵌入式 WPF WebBrowser 控件中弹出窗口 我没有找到别人的解决方案 也没有找到允许弹出窗口的COM接口 我不想更改用户注册表设置或使用类似的侵入方法 因为应用程序旨在通过 ClickOnce 分发 您可以通过处理
  • 当 ToString() 具有协作对象时,为什么 WPF 数据绑定不显示文本?

    在一个简单的形式中 我绑定到许多不同的对象 有些放在列表框中 有些放在列表框中 有些放在列表框中 一些在文本块中 其中一些对象具有协作对象 在这些对象上ToString 方法在执行其工作时调用 通常是某种格式化程序 当我单步执行代码时 我发
  • 如何使用代码隐藏创建 StackPanel -> 边框 -> 背景

    我正在尝试设置 a 的属性TreeViewItem gt StackPanel在 C 中就像这个问题 https stackoverflow com questions 8203316 adding content to a treevie
  • DataGrid、TextBox - 绑定和即时更新

    我的应用程序 包含图中的窗口 DataGrid 的 ItemsSource 设置为 editList 声明为 IList editList 数据网格设置为只读 供应商名称文本框的绑定设置为 Text Binding ElementName
  • 新的 Windows 应用程序 - 什么语言?

    我们目前正处于开发 Windows 桌面应用程序的前期阶段 但当听到有关 Windows 8 Silverlight WPF Jupiter 的所有最新讨论时 我不知道该相信什么了 现在用WPF启动一个新项目是不是有问题 我应该切换到 Si
  • 如何在MVVM中实现appSettings

    我正在尝试摆脱我使用的警告appSettings在 WPF 项目中 应用程序配置

随机推荐

  • git 的“文件模式”是什么?

    什么是 gitfilemode 对我来说 它在每个仓库中 git config文件 靠近顶部 core filemode true 它是什么 这是什么意思 与以下有什么关系吗 bare false 我也不太明白 A git 裸仓库 详细信息
  • Heroku 无法将我的 Laravel 应用程序识别为 PHP 应用程序,并且不进行 Composer 安装

    我正在尝试在 Heroku 上发布我的 Laravel 应用程序 我已从 gitignore中排除了composer lock文件 并创建了一个包含 web vendor bin heroku php apache2 public 我创建了
  • 两个具有相同 id 的 XML 元素

    我试图以完全相同的方式修改两个 TextView 我想我可以给它们相同的 id 并使用 findViewById 和 setText 方法在两行中更改这些 TextView 但似乎只有一个 TextView 发生了变化 有没有办法做到这一点
  • 向量化函数 (Python)

    我是 python 新手 尝试进行硬件分配 但它不断向我抛出此错误 在 iPython Notebook 中 TypeError unsupported operand type s for or pow list and float 这是
  • Ruby - 将数组映射到哈希图

    我有一个数组和一个返回给定值的函数 最终我想创建一个哈希映射 将数组的值作为键值 将 f key value 的结果作为值 是否有一种干净 简单的方法 例如类似于数组的each map 使用块来执行此操作 所以相当于 hsh 1 2 3 4
  • OpenCV 对白色像素进行分组

    我已经完成了艰苦的工作 将 MacBook 上的 iSight 摄像头变成了红外摄像头 对其进行了转换 设置了阈值等 现在得到的图像如下所示 alt text http www tommed co uk images opencv ir e
  • 将位图居中并重复边缘像素

    我正在尝试在我的 Android 应用程序中使用图像作为背景 如果图像不适合屏幕 我希望图像水平居中并垂直顶部 应通过重复边缘来填充剩余的屏幕区域 我的布局 xml 如下所示
  • 如何在“单击”槽中使用 QApplication::mouseButtons() 来判断鼠标按钮?

    我有一个 QMainWindow 并且想要处理来自其中较小的小部件 例如 tableview 的 单击 信号 最初我将信号连接到这个 QMainWindow 的插槽 这是最常见的方法 现在我需要判断单击了哪个鼠标按钮 并对左右按钮执行不同的
  • 我可以使用 System.Text.Json 通过私有构造函数反序列化 Json 吗?

    想知道是否可以拥有私有构造函数并使用新的 System Text Json 序列化器 public class MyModel public string Name get set public string Data get set pr
  • iOS:使用覆盖裁剪从 UIImagePickerController 相机抓取的静态图像

    我是 iOS 新手 过去一周我一直在网上寻找教程 例如 处理 Exif 图像 http niftybean com main blog 16 selecting regions from rotated exif images on iph
  • 计算数组的平均值

    我想使用数组计算平均数 我希望程序询问成绩的数量 然后我想输入成绩数字 在我想获得平均输出之后double 到目前为止 这是我的代码 public class Average public static void main String a
  • 使用 purrr::map 将多个数据帧写入 csv 文件 [重复]

    这个问题在这里已经有答案了 PROBLEM 我有一个数据帧列表 应将其作为 csv 文件写入磁盘 假设这是数据框列表 dfs lt list iris mtcars 什么没有奏效 我尝试像这样构建正确的文件名 但它不起作用 dfs gt m
  • 如何在AWS Lambda中模拟multiprocessing.Pool.map()?

    AWS Lambda 上的 Python 不支持multiprocessing Pool map 如记录在这另一个问题 https stackoverflow com questions 34005930 multiprocessing s
  • Breeze 使用 DB EntityType 管理 NODB EntityType

    我正在使用 Papa 的课程 CCJS 代码来研究 Breeze js 和 SPA 使用此代码 我尝试管理来自服务器的附加信息 但这不是来自 EntityFramework 的元数据中包含的实体 所以我创建了一个名为 Esto 的 NO D
  • 循环直到在表中找到 2 个特定值?

    我试图找到一种更聪明的方法来解决这个问题 这是与游戏相关的代码的摘录 它循环遍历每个背包的每个插槽 直到找到铲子和绳子 local continue local foundShovel foundRope for i 0 Container
  • 错误:无法安全地评估递归定义模块的定义

    我很想了解为什么会发生此错误以及解决该错误的最佳方法是什么 我有几个文件types ml and types mli它定义了一个变体类型value可以是许多不同的内置 OCaml 类型 float int list map set 等 由于
  • 使用 aes_256_cbc 密码加密时的默认 IV 是多少?

    我在一个文件中生成了一个随机 256 位对称密钥 用于使用 OpenSSL 命令行加密一些数据 稍后我需要使用 OpenSSL 库以编程方式解密该数据 我没有成功 我认为问题可能出在我正在使用 或没有使用 的初始化向量中 我使用以下命令加密
  • Codeigniter 3.0.4 在我的服务器上出现 404 Page Not Found 错误

    我是 codeigniter 的新手 在我的本地主机上开发一个网络应用程序后 我将我的网站上传到服务器上 然后导入我的数据库 之后我更改了database php文件中的数据库设置 并且我还更改了config php文件中的基本url 我得
  • 使用宏将word文档中的公式转换为图像

    我有这个宏可以将文档中的所有形状转换为图像 Dim i As Integer oShp As Shape For i ActiveDocument Shapes Count To 1 Step 1 Set oShp ActiveDocume
  • MVVM 层次结构中的更改通知

    假设在某个抽象 ViewModel 基类中 我有一个普通的旧属性 如下所示 public Size Size get return size set size value OnPropertyChanged Size 然后 我创建一个更具体