网站建设书本,sem培训学校,房地产公司排名,让网站对搜索引擎友好概述
我如何#xff08;不在后面的代码中使用代码#xff09;自动绑定到我想要的视图#xff1f;据我了解#xff0c;如果正确完成#xff0c;这就是模式应该如何工作。我可以使用主窗口 xaml 中的代码实现这一切#xff0c;我甚至正确创建了一个资源字典#xff08;因…概述
我如何不在后面的代码中使用代码自动绑定到我想要的视图据我了解如果正确完成这就是模式应该如何工作。我可以使用主窗口 xaml 中的代码实现这一切我甚至正确创建了一个资源字典因为我可以在直接窗口中访问它。
我有一个主窗口。这是一个有 3 行的网格。顶行是菜单。底行是状态栏。中间是一个堆栈面板根据菜单选择动态加载内容。
我有 2 个视图用于填充此堆栈面板。一个只有一个样式文本框帮助和关于。另一个本身就是一个复合视图一个搜索面板、一个结果网格和一个详细信息面板所有这些都加载到停靠管理器框架中。
在后面的主窗口代码中当用户单击菜单选项时我清除堆栈面板的子项实例化视图模型实例化将视图模型传入其中的视图然后将新视图添加到堆栈的子项中. 这很好用但我认为它与模式不一致。
正如我提到的我有资源字典但我不知道如何将它与堆栈面板相关联。我假设我必须使用绑定但我无法弄清楚如何绑定到资源字典和/或如何告诉它更改命令视图。
视图绑定模型方案
在 XAML 中创建静态资源。
Window x:ClassWpfApplication2.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfApplication2mc:IgnorabledTitleMainWindow Height350 Width525Window.Resourceslocal:MainViewModel x:KeyMainVM //Window.ResourcesGrid DataContext{StaticResource MainVM}
/Grid
/Window2.在View的构造函数中绑定
我知道你提到不使用背后的代码但这也是一种选择。只要你不在后面的代码中写任何逻辑那么你就很好。
public MainWindow()
{InitializeComponent();this.DataContext new MainViewModel();
}使用 ViewModelLocator 绑定
您可能想要创建一个视图模型定位器类该类负责为您的视图提供所需的视图模型。
这是一个视图模型定位器类的简单示例。viewmodel 定位器类公开了一些 viewmodel 属性。稍后我们会将这些属性绑定到视图的数据上下文。 public class ViewModelLocator{public ViewModelLocator(){this.MainVM new MainViewModel();this.AnotherVM new AnotherViewModel();}public MainViewModel MainVM { get; set; }public AnotherViewModel AnotherVM { get; set; }}然后您可以在 App.xaml 中创建视图模型定位器的静态资源使其可用于应用程序中的所有视图。
Application x:ClassWpfApplication2.Appxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localclr-namespace:WpfApplication2StartupUriMainWindow.xamlApplication.Resourceslocal:ViewModelLocator x:KeyLocator / /Application.Resources
/Application然后您可以将视图的数据上下文绑定到视图模型定位器的属性。
该示例告诉我们如果视图模型定位器MainViewModel 实例绑定到 Window 的数据上下文则您正在将 MainVM 属性绑定。
Window x:ClassWpfApplication2.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfApplication2mc:IgnorabledTitleMainWindow Height350 Width525DataContext{Binding MainVM, Source{StaticResource Locator}}视图模型双向数据绑定方案
1.简述
JS 几个流行的框架 Vuejs、Ember.js、AngularJS 都使用 MVVM 模式该模式叫做视图模型双向数据绑定以达到数据和视图快速同步的目的。本文就对其中涉及的原理部分加以说明(后续还有一篇模拟 实现)。主要体现就是表单元素值变JS变量值改变若页面上有输出输出值也改变典型的代码如下vuejs.org 上提供的例子
// HTML
{{ message }}
// JS 8var app6 new Vue({ 9 el: #app,10 data: {11 message: Hello Vue!12 }13})效果 文内容包括但不限于
MVVM 数据双向绑定DOM 事件监听数据劫持观察者模式
先从什么是 MVVM 说起。
2.MVVMModel-View-ViewModel
MVVM 拆开来是 Model-View-ViewModelViewViewModelModel 三部分组成它是一种前端开发的架构模式。
View 代表的是视图模版。它用来显示数据。 Model 代表的是模型、数据可以在 Model 层中定义数据修改和操作的业务逻辑。 ViewModel 连接 Model 和 View。 如图所示
在 MVVM 的架构下View 层(DOM展示层)和 Model 层(数据对象层)并没有直接联系而是通过 ViewModel 层进行交互。ViewModel 层通过双向数据绑定将 View 层和 Model 层连接了起来使得 View 层和 Model 层的同步工作完全是自动的。
因此开发者只需关注业务逻辑无需手动操作 DOM复杂的数据状态维护交给 MVVM 统一来管理称之为数据驱动的开发方法。
3 .双向数据绑定
就是指数据的传递有两个方向
方向1从数据到视图数据变化时视图也变化。 方向2从视图到数据例如 input 框的内容变化时JS 维护的数据也会变化同时再次传递到视图上视图也随之变化。 若要实现以上的数据传递我们需要去监听数据变化和视图的变化才能做出相应改变。
4 .监听 DOM 改变
监听 DOM 视图的改变是为了更新模型。我们通过 DOM 事件就可以实现监听视图的改变典型的 input 的 change、input 事件都可以完成监听通过事件处理器实现对应的模型的数据改变。
前面例子中的 input 元素的值的不断改变就是 DOM 的改变我们监听到之后将模型变量 message 做同步更改就是视图改变传递到了模型上。
那么为什么页面的展示也变了呢就是下一个传递了。模型改变传递到视图上。数据的改变传递到视图上如何实现的呢就是监听数据实现的。
5 .监听模型数据变化数据劫持
如何做到 message 模型变量的变化我们可以监听到呢其实是利用的 JS 中对象属性修改的特殊 get、set 方法实现的示例代码如下 var o {}; // 创建一个新对象 // 在对象中添加一个属性与存取描述符的示例 var messageValue; 5Object.defineProperty(o, message