问题标签 [mvvm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2337 浏览

silverlight - Silverlight MVVM ListBoxItem IsSelected

我有一组绑定到 ListBox 的 ViewModel。我正在尝试将每个的 IsSelected 属性绑定在一起。在 WPF 中,它通过设置样式来工作:

这在 Silverlight 中不起作用。我怎样才能做到这一点?

0 投票
1 回答
8329 浏览

.net - WPF MVVM + UserControl 与后面的代码

出于某种原因,我在 MVVM WPF 应用程序中通过我的 ViewModel 绑定自定义用户控件时遇到问题。基本控件是一个带有三个文本框的日期输入表单。我正在使用用户控件的代码隐藏来捕获 textchange 事件以及一些操作。出于某种原因,向属性添加绑定永远不会触发。

用户控件的 XAML:

代码隐藏:

{

}

当我像这样在 DataTemplate 中创建用户控件时:

我的 ViewModel 中的 BirthDate 的获取和设置永远不会设置。VM 上的 BirthDate 是一个字符串。

0 投票
2 回答
17994 浏览

silverlight - MVVM 模式中的 Silverlight 子窗口

我正在尝试使用 Silverlight (3) 中的 MVVM 模式从 ChildWindow/popup 中获取数据的正确方法。例如:我有一个带有数据输入表单的主页,我想打开一个包含客户列表的弹出窗口。当用户选择客户时,我想将所选客户转移到主页。这就是我目前正在使用的(示例)代码:

主页

子窗口

这是正确的方法还是有更“简单”的方法?

干杯,韩国

0 投票
1 回答
1449 浏览

naming-conventions - Model-View-ViewModel (MVVM) 类和实例的名称应该有多冗长?

一般来说,我更喜欢详细说明 .NET 类和实例名称,但有时(引用 Mike Woodhouse 的话):

过于冗长往往会掩盖语法,而语法很重要。

我觉得我真正误入了过度冗长制度的第一个地方是在 Silverlight 和 WPF 应用程序中实现模型-视图-视图模型 (MVVM) 模式。

例如,我从一个 EnumerableRange 模型对象开始:

然后,我想创建一个控件,允许我显示此类以供用户输入。因此,我创建了一对与视图相关的类:

  1. 一个 EnumerableRangeControlView 用户控件(在 XAML 中),以及
  2. POCO EnumerableRangeControlViewModel

现在,我分别在父 View 和 ViewModel 中使用这对。使用 MVVM,视图实例不需要名称,但我的 ViewModel 实例现在命名为:

IndependentVariableEnumerableRangeControlViewModel

事情开始失控了!你会怎么办?

0 投票
1 回答
240 浏览

mvvm - CommandSink 背后的隐喻是什么?

我正在研究Josh Smith 在 CommandSink 上的代码和文章,这是一种简化在 MVVM 上下文中使用命令的解决方案,似乎非常有用。

但我觉得我错过了一些关于这个概念的东西,因为我不理解“sink”这个词指的是什么,例如

  • 命令沉入ViewModel 背后的代码?
  • 命令在集合中,例如盘子在水槽中?
  • 或者这是保持 View 和 ViewModel同步的文字游戏?
0 投票
2 回答
5015 浏览

wpf - WPF MVVM:ResourceDictionary 的约定优于配置?


更新

本着 StackOverflow 的 wiki 精神,这里有一个更新:

我在下面添加了 Joe White 的 IValueConverter 建议。它就像一个魅力。

我已经编写了一个“快速入门”示例,它使用一些廉价的字符串替换来自动映射 ViewModels->Views。如果没有找到代表 ViewModel 的 View,则默认为“正在建设中”页面。我将这种方法称为“WPF MVVM White”,因为这是 Joe White 的想法。这是几个屏幕截图。

第一张图片是“[SomeControlName]ViewModel”的案例,基于纯命名约定,有一个对应的“[SomeControlName]View” 。第二种情况是 ModelView 没有任何视图来表示它。不再有长 ViewModel 到 View 映射的 ResourceDictionaries。现在是纯粹的命名约定。

Wpf Mvvm 白色

我在这里发布了该项目的下载: Mvvm.White.Quickstart.zip


原帖

我在周末阅读了 Josh Smith关于 WPF MVVM的精彩 MSDN 文章。它注定会成为经典。

我花了一段时间才理解要求 WPF 呈现ViewModel的魔力。

这就像说“这是一个类,WPF。去找出使用哪个 UI 来呈现它。”

对于那些错过这个魔法的人,WPF 可以通过在 ResourceDictionary 映射中查找 ModelView 的View拉出相应的View来做到这一点。(向下滚动到图 10 提供视图)。

我立即跳出来的第一件事是已经有一个强大的命名约定:

我的问题是:

由于ResourceDictionary可以以编程方式进行操作,我想知道是否有人设法使用 Regex.Replace 整个东西,所以查找是自动的,并且任何新的 View/ViewModels 都通过它们的命名约定得到解决?

[编辑] 我想象的是对 ResourceDictionary 的钩子/拦截。

...还考虑在启动时使用互操作提取*View$*ViewModel$类名在代码中构建 DataTemplate 字典的方法:

0 投票
2 回答
2372 浏览

.net - 从 IValueConverter 获取对 ViewModel 的引用

是否有一种干净和/或可接受的标准方式从 IValueConverter 引用 ViewModel,或者这是否破坏了 MVVM 模式?基本上,我想根据 ViewModel 的其他属性转换 UI 中的绑定数据。我想这与如何从 IValueConverter 引用窗口/页面是同一个问题,因为对控件的引用没有传递给 Convert/ConvertBack 方法。

0 投票
4 回答
2046 浏览

c# - 有人可以解释这个 C# 结构:base.Executed += (s, e) =>

我正在研究Josh Smith 的 CommandSink 示例base.Executed += (s, e) =>...结构让我很困惑,有人能帮我弄清楚吗?

我的理解:

  • base.CanExecute 是继承类 CommandBinding 上的事件
  • += 正在向该事件添加委托
  • 委托是遵循该行的匿名函数

我不明白的是:

  • (s,e) 是该函数的签名吗?
  • 变量 s 在哪里使用?

这是上下文中的代码:

0 投票
17 回答
52382 浏览

c# - 在 MVVM 中,ViewModel 或 Model 是否应该实现 INotifyPropertyChanged?

我处理过的大多数 MVVM 示例都有Model实现 INotifyPropertyChanged,但在Josh Smith 的 CommandSink 示例 中 ViewModel 实现了INotifyPropertyChanged

我仍在认知上将 MVVM 概念放在一起,所以我不知道是否:

  • 您必须将其放入INotifyPropertyChangedViewModel 才能开始CommandSink工作
  • 这只是规范的偏差,并不重要
  • 您应该始终实现模型INotifyPropertyChanged,这只是一个错误,如果将其从代码示例开发为应用程序,则可以更正

其他人在您从事的 MVVM 项目上有何经验?

0 投票
2 回答
9520 浏览

wpf - WPF - 从数据中获取超链接命令?

在 WPF 中,如何获取对超链接应从对象属性调用的命令的引用?

我正在使用 MVVM 模式创建一个 WPF 应用程序。主窗口中的列表框显示超链接。单击时,每个超链接都会调用视图模型的 ICommand 属性之一。如何指定应该调用哪个 ICommand?

这是我到目前为止所尝试的:超链接包含在 ViewModel.Hyperlinks 属性中,该属性绑定为列表框的 ItemsSource。Hyperlinks 属性包含 MyHyperlink 类型的对象:

MyHyperlink.ViewModelCommand 属性包含单击超链接时应调用的视图模型 ICommand 的名称。我想使用该值为 WPF 超链接控件的 Command 属性指定 PropertyPath。我尝试使用命令名称为列表框创建一个 PropertyPath 资源,但 WPF 不会接受。这是我的 XAML:

如何指定单击超链接时应调用哪个 ICommand?我是创建一个资源(如上所示),还是它以其他方式完成?我需要在 XAML 中执行此操作——我不想诉诸代码隐藏。谢谢你的帮助!