wpf - MVVM概念的混淆

标签 wpf xaml mvvm windows-phone-8 inotifypropertychanged

我想了解 MVVM从过去两周开始,但仍然对理解它有很多困惑。

我最近开始了 Windows Phone 8 的开发。

我对 的理解MVVM ,

M = Model 表示数据,具体的意思是 Model 应该被视为 C 语言的 struct。它只会有属性或成员变量(对象)。它对 View 和 View 模型一无所知。

V = 普通 XAML。应该只有一种绑定(bind)方式,那就是使用 DataContext .

虚拟机 = View Model是 View 模型。 VM 使用 M 来保存其数据(使用 Containership),VM 负责将数据保存在 DB 中或从 db 中获取数据。数据库交互应该发生在 VM 中。虚拟机应该实现 INotifyPropertyChanged ,因为它负责保存和获取数据。

请建议我对 MVVM 有错误的概念。

最佳答案

你所说的一切在技术上都是正确的,但我会尝试以更抽象的方式处理设计模式,并考虑它试图解决的问题。 MVVM 试图解决在 View 和模型之间提供分离以及提供双向绑定(bind)(即从模型中提取数据并呈现它,以及获取用户输入并将其保存回模型)的问题。

大多数模式都希望将 View 和模型分开,因此在 MVVM 中仍然是相同的,但更模糊的是如何转换/格式化数据以显示给用户,以及如何将用户输入转换为模型。在许多 MVC 框架中,模型数据在 View 中的呈现处理得非常好,但您通常需要靠自己来获取用户输入并干净利落地转换回模型。 MVVM 旨在处理这两者。

Microsoft 已选择使用 DependencyProperty、ICommand 和 ValueConverters 等工具来实现这一点。基本思想是您的 View 只会通过绑定(bind)松散地附加到 View 模型,因此理论上您可以将 View 模型与其他 View 重用。这在另一个方向上是相同的(例如,这种干净的双向绑定(bind)使 MVVM 与 MVC 不同),因为您的 VM 可以通知属性已更改(这就是您必须实现 INotifyPropertyChanged 的​​原因),但 VM 有不知道是否有 View 可以使用react。当您想要重用这些组件时,这非常简单。

因此,了解 MS 试图用 MVVM 解决什么问题后,您有望更好地理解 INotifyPropertyChanged 之类的东西存在的原因或 ICommand 的用途,并希望能充分利用 MVVM 模式。

关于wpf - MVVM概念的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21276292/

相关文章:

c# - 如何从 ViewModel 访问 ObservableCollection 中的数据?

wpf - 如何知 Prop 有扩展选择模式的DataGrid中的选定项目?

c# - 绑定(bind)在 WPF MVVM C#​​ 中不起作用

c# - 窗口背景颜色 : appears darker than specified?

wpf - 实例化其他 XAML 文件中定义的对象

c# - 将 XAML 存储在数据库中是否是糟糕的设计?

wpf - 如何使用MVVM Light在ViewModel之间传递变量?

c# - 仅在可见时延迟加载 System.Windows.Control.Image

WPF 设计问题(自定义控件或 mvvm)

listview - 从按钮命令 xamarin.forms MVVM 获取 ListView