两个视图 - 一个 ViewModel

2024-04-04

我一定是误解了这个概念ViewModels和意见。但目前我无法从地面重建应用程序,这次做得更好。我的情况是,我有一个视图,用户可以在其中加载文件并读取它们,绘图仪显示图形并实现一些操作。我希望能够生成数据报告(如摘要),但我希望它在其他视图中。我在用着ModernUI http://mui.codeplex.com/,此另一个视图位于另一个选项卡中。

我想要的是同步两个选项卡,当我在“绘图仪选项卡”中加载文件时,该文件也必须在另一个视图中加载。为此,我认为我需要的是将视图绑定到相同的ViewModel,例如我有LoadedFiles = List<File>,这样我就能实现它。问题是如果我绑定它

MainViewModel vm = new MainViewModel();
DataContext = vm;

或在 XAML 中

<UserControl.Resources>
<UserControl.DataContext=local:MainViewModel/>
</UserControl.Resources>

我实际上绑定到不同的 MainViewModel,并且数据不再共享。我是否需要 MVVM 库中的一些类(例如 Locator 等)?这怎么能做到呢?将来我可以做什么,以便为每个视图拥有单独的 ViewModel,但数据相同(或不同)?


您可以创建一个具有 LoadedFiles 属性的新类,然后每个唯一的视图模型都可以引用该类。您可以在多个视图模型之间共享具有这些共享属性的一个类。我是将 MVVMLight 的定位器与 Autofac 容器结合使用 http://www.spikie.be/blog/post/2013/04/12/10-things-you-might-have-missed-about-MVVM-Light.aspx将此类注入到我的每个视图模型中(基本上使用控制反转和依赖注入)。

您可以阅读控制反转和依赖注入here http://martinfowler.com/articles/injection.html#InversionOfControl.

一些示例代码-

public MyClass
{
    public List<File> LoadedFiles{get; set;}
}

public ViewModelOne
{
    public MyClass MyClassInstance {get; set;}
    public ViewModelOne(MyClass myclass)
    {
        MyClassInstance = myclass
    }
}

public ViewModelTwo
{
    public MyClass MyClassInstance {get; set;}
    public ViewModelTwo(MyClass myclass)
    {
        MyClassInstance = myclass
    }
}

你也可以使用MVVMLight 的定位器 https://stackoverflow.com/questions/8075305/need-help-setting-up-mvvm-light-viewmodellocator将每个视图的 DataContext 设置为适当的视图。

<UserControl x:Class="View1"             
             DataContext="{Binding ViewModel1, Source={StaticResource Locator}}"...>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个视图 - 一个 ViewModel 的相关文章

  • 为什么不能使用initializer_list来初始化unique_ptr的向量? [复制]

    这个问题在这里已经有答案了 我想知道为什么initializer list 不能与unique ptr 一起使用 std vector
  • 无法在表适配器配置属性中找到对象“Web.config”的连接“MyConnName”

    I want to change the query in table adapter but it s not opening throwing an error Configure table Adapter Failed in pro
  • 通过 EUSART PIC18F45K80 打印消息

    我正在尝试向 Docklight 发送串行消息 但始终收到空值 我正在使用带有 XC8 MPLAB X 的 PIC18F45K80 我的代码中的所有内容似乎都是正确的 但我想我错了 我该如何修复它 include
  • 是否返回 std::move (x)?

    Are std vector
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • WPF 缩放变换和 ScrollViewer - 缩放时无法滚动超出原始大小

    我在 ScrollViewer 中有一个 StackPanel 我有一个滑块 可以在堆栈面板上进行缩放变换 以允许放大和缩小功能 问题是 当我放大时 滚动查看器不会将内容视为 更大 因此 如果我滚动一点并尽可能向右滚动 它会在我到达内容末尾
  • 为什么Windsor只能拦截虚方法或接口方法?

    我正在阅读文档 发现如果不使用接口 那么 Windsor 只能拦截虚拟方法 这是 Windsor 的限制还是 C 语言的限制 我正在寻找深入的答案 C 语言在这里完全无关 问题是拦截在运行时级别如何工作 一种技术是从类继承 实现接口并将其用
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • 如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]

    这个问题在这里已经有答案了 如果有一些跨平台 C C 代码需要在 Mac OS X iOS Linux Windows 上编译 我如何在预处理器过程中可靠地检测到它们 大多数编译器都使用预定义的宏 您可以找到列表here http sour
  • 将华氏温度转换为摄氏度的 C 程序始终打印零

    我需要一些关于用 C 语言将华氏温度转换为摄氏度的程序的帮助 我的代码如下所示 include
  • C++ 项目编译为静态库,编译为动态库失败(链接器错误)。为什么?

    我有一个 VS2008 本机 C 项目 我希望将其编译为 DLL 它仅引用一个外部库 log4cplus lib 并使用其功能 当然也使用 log4cplus 的 h 文件 当我尝试将我的项目编译为静态库时 它成功了 当我尝试作为 DLL
  • C# 中的快速字符串解析

    在 C 中解析字符串最快的方法是什么 目前我只是使用字符串索引 string index 并且代码运行合理 但我忍不住认为索引访问器所做的连续范围检查必须添加一些东西 所以 我想知道我应该考虑哪些技术来增强它 这些是我最初的想法 问题 使用
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • @PostConstruct 中没有会话休眠

    MyDao 类具有通过 Hibernate SessionFactory 执行整个持久性任务的方法 它工作得很好 我在 MyService 中注入了 MyDao 如上所示 但是当在注入 MyDao 后调用 PostConstruct ini
  • 更好地理解 Java 中的递归

    好吧 我对 Java 中的递归有些困惑 假设我有以下代码 static int findShortestString String paths int lo int hi if lo hi return lo int minindex fi
  • mongos 上的 MongoDB 错误:位置选项太多

    我正在尝试运行一个批处理脚本 这应该是我第一次在 mongodb 上进行分片 它在这一行显示以下错误 D mongodb win32 x86 64 2 2 3 bin gt mongos configdb localhost 26050 l
  • 我可以使用 shmctl 调整 Linux 共享内存的大小吗?

    我有一个 C 应用程序 它通过 shmget 2 在 Linux 系统上分配共享内存 我存储在共享内存中的数据会定期增长 我想以类似于 realloc 增长常规内存的方式调整共享内存的大小 有没有办法做到这一点 我在 IBM 网站上找到了一
  • Python 许多依赖项中的任何一个

    我有时会遇到这样的情况 我有一个包可以依赖于包 A 或 B 例如 我的项目依赖于一个名为spam 如果该项目重命名为pyspam 我的项目可以取决于spam or pyspam 我无法弄清楚 或找到 如何在 setup py 中定义此类依赖
  • 安装 Angular 不支持的引擎,OSX

    我正在重新安装我的 MacBook 当我安装 npm install g angular cli Angular 时 我收到以下消息 知道为什么吗 我怀疑 nom 版本 但我附带了节点 Developments npm install g
  • PIL 改变颜色通道强度

    我想制作一个颜色选择器 它可以重新着色 png 纹理 同时保留 python3 中的透明度 我只希望图像的较亮部分重新着色 但也保持渐变 我能想到的唯一选择是调整颜色通道强度 但是我在 PIL 文档中没有找到类似的内容 如何更改颜色通道强度
  • 查找哪个文本框为空

    我有一个简短的 Windows 程序 用来快速添加信息 但现在我正在努力增强它 正在寻找一种更有效的方法来检查空文本框 如果该框为空 则找出它是哪一个并将焦点设置回仅该框 目前 我循环遍历所有这些框 并检查是否有任何框是空的 如果它只是显示
  • Android Drawable(进度条、开关)渲染问题

    我正在尝试实现下面的用户界面 我正在使用带有 ADT 插件的 Eclipse 下面是圆 白色 深灰色 的实现 circle shape xml
  • 页面加载 - 页面之间出现白色“闪烁”

    有两个网站 一个正在运行 一个正在开发中 我正在将一个站点移植到 Zend Framework 出于可维护性 集成目的 原始 实时 站点具有无缝页面加载 它将加载 然后更新屏幕上的内容 同时保留页面上的背景图像 导航等 移植的网站 开发 会
  • 在 Swift 3.0 中创建目录

    我是一名九年级新生swift 创建一个学校项目 我正在尝试创建一个目录 将扫描文件保存为 pdf 格式 创建目录时出现以下错误 错误1 无法在属性初始值设定项中使用实例成员 filemgr 属性初始值设定项在 self 可用之前运行 Err
  • 如何使用相同的函数按行比较矩阵列表

    假设我有一个包含两个矩阵的列表 x and y x lt c 3 4 5 5 3 4 5 6 5 6 2 1 x lt matrix x 3 4 y lt c 3 4 5 5 3 4 5 6 5 5 2 1 y lt matrix y 3
  • 在字符串中添加新行以进行翻译

    我正在使用 ngx 翻译 如何在要翻译的字符串中添加换行符 在我的模板中 我有 STRING TO TRANSLATE translate 在我的 en json 中 STRING TO TRANSLATE text on first li
  • 如何将纪元转换为日期时间红移?

    我在 dbeaver 工作 我有一个表x 表 x 有一个 时间戳 列 1464800406459 1464800400452 1464800414056 1464800422854 1464800411797 我想要的结果 Wed 01 J
  • ggplot根据数据框中的值重新排序堆积条形图

    我正在 R 中使用 ggplot2 制作堆积条形图 并在 y 轴上具有特定的条形排序 create reproducible data library ggplot2 d lt read csv text Day Location Leng
  • BASH if 语句中的函数返回值

    我已经研究了这里处理 BASH if then 语句中的函数返回值的各种方法 但似乎都不起作用 这是我所拥有的 function is cloned if d DIR NAME then return SUCCESS fi return F
  • 在后台加载新场景

    我正在创建一个针对 Samsung Gear VR 的 Unity 应用程序 我目前有两个场景 最初的场景 第二个场景 数据量大 加载场景需要太多时间 从第一个场景开始 我想在后台加载第二个场景 并在加载后切换到它 当新场景在后台加载时 用
  • IE11未发起CORS请求

    通过摆弄 如果是跨源的 IE11 似乎不会发出 ajax 请求 如果资源 API 未发送必要的标头 FF 和 Chrome 至少会发出请求并抛出错误 在我的例子中 资源 API Web API 2 0 是添加所需的标头 http www a
  • 动态 Jquery 拆分器插件

    我正在尝试使用 Jquery Splitterhttp www methvin com jquery splitter http www methvin com jquery splitter 如果分隔窗格是静态的 它工作得很好 但我需要在
  • 两个视图 - 一个 ViewModel

    我一定是误解了这个概念ViewModels和意见 但目前我无法从地面重建应用程序 这次做得更好 我的情况是 我有一个视图 用户可以在其中加载文件并读取它们 绘图仪显示图形并实现一些操作 我希望能够生成数据报告 如摘要 但我希望它在其他视图中