我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MVVMLight怎么实现双向数据绑定

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MVVMLight怎么实现双向数据绑定

这篇文章主要介绍“MVVMLight怎么实现双向数据绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MVVMLight怎么实现双向数据绑定”文章能帮助大家解决问题。

第一步:先写一个Model,里面包含我们需要的数据信息

代码如下:

    /// <summary>     /// 用户信息     /// </summary>     public class UserInfoModel : ObservableObject     {         private String userName;         /// <summary>         /// 用户名称         /// </summary>         public String UserName         {             get { return userName; }             set { userName = value; RaisePropertyChanged(()=>UserName); }         }         private Int64 userPhone;         /// <summary>         /// 用户电话         /// </summary>         public Int64 UserPhone         {             get { return userPhone; }             set { userPhone = value; RaisePropertyChanged(() => UserPhone); }         }         private Int32 userSex;         /// <summary>         /// 用户性别         /// </summary>         public Int32 UserSex         {             get { return userSex; }             set { userSex = value; RaisePropertyChanged(()=>UserSex); }         }         private String userAdd;         /// <summary>         /// 用户地址         /// </summary>         public String UserAdd         {             get { return userAdd; }             set { userAdd = value; RaisePropertyChanged(() => UserAdd); }         }

第二步:写一个ViewModel

包含了View所需要的命令和属性:

    public class BothWayBindViewModel:ViewModelBase     {         public BothWayBindViewModel()         {             UserInfo = new UserInfoModel();         }         #region 属性         private UserInfoModel userInfo;         /// <summary>         /// 用户信息         /// </summary>         public UserInfoModel UserInfo         {             get { return userInfo; }             set { userInfo = value; RaisePropertyChanged(() => UserInfo); }         }         #endregion         #region 命令         #endregion     }

第三步:在ViewModelLocator中注册我们写好的ViewModel:

SimpleIoc.Default.Register<BothWayBindViewModel>();

  using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Ioc; using Microsoft.Practices.ServiceLocation; namespace MVVMLightDemo.ViewModel {     /// <summary>     /// This class contains static references to all the view models in the     /// application and provides an entry point for the bindings.     /// </summary>     public class ViewModelLocator     {         /// <summary>         /// Initializes a new instance of the ViewModelLocator class.         /// </summary>         public ViewModelLocator()         {             ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);             #region Code Example             ////if (ViewModelBase.IsInDesignModeStatic)             ////{             ////    // Create design time view services and models             ////    SimpleIoc.Default.Register<IDataService, DesignDataService>();             ////}             ////else             ////{             ////    // Create run time view services and models             ////    SimpleIoc.Default.Register<IDataService, DataService>();             ////}             #endregion             SimpleIoc.Default.Register<MainViewModel>();             SimpleIoc.Default.Register<WelcomeViewModel>();             SimpleIoc.Default.Register<BothWayBindViewModel>();             }         #region 实例化         public MainViewModel Main         {             get             {                 return ServiceLocator.Current.GetInstance<MainViewModel>();             }         }         public WelcomeViewModel Welcome         {             get             {                 return ServiceLocator.Current.GetInstance<WelcomeViewModel>();             }         }         public BothWayBindViewModel BothWayBind         {             get             {                  return ServiceLocator.Current.GetInstance<BothWayBindViewModel>();             }         }              #endregion         public static void Cleanup()         {             // TODO Clear the ViewModels         }     }

第四步:编写View(注意标红的代码)

<Window x:Class="MVVMLightDemo.View.BothWayBindView"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         DataContext="{Binding Source={StaticResource Locator},Path=BothWayBind}"         Title="BothWayBindView" Height="300" Width="300">     <Grid>             <StackPanel Orientation="Vertical" Margin="10,10,0,0">                 <StackPanel Orientation="Horizontal" >                     <TextBlock Text="请输入姓名:" ></TextBlock>                     <TextBox Text="{Binding UserInfo.UserName,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Width="200" ></TextBox>                 </StackPanel>                  <StackPanel Margin="0,10,0,0" Orientation="Horizontal" >                     <TextBlock Text="Hello " ></TextBlock>                     <TextBlock Text="{Binding UserInfo.UserName}" ></TextBlock>                 </StackPanel>                  <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal" >                 </StackPanel>                              </StackPanel>     </Grid></Window>

效果如图所示(当修改输入框的内容的时候,对应绑定数据相应改变,并触发对UI的修改,所以下面那行文字也相应改变改变。):

MVVMLight怎么实现双向数据绑定

前面我们已经了解到了,RaisePropertyChanged的作用是当数据源改变的时候,会触发PropertyChanged事件达到通知UI更改的目的(ViewModel => View)。

那View上的变化要怎么通知到数据源呢:

View中文本框绑定内容如下:

{Binding UserInfo.UserName,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay},

大家会看到多了两个属性,一个是UpdateSourceTrigger,一个是Mode属性。

UpdateSourceTrigger的作用是 当做何种改变的时候通知数据源我们做了改变。

枚举类型效果
Default默认值(默认为LostFocuse)
Explicit当应用程序调用 UpdateSource 方法时生效
LostFocus失去焦点的时候触发
PropertyChanged数据属性改变的时候触发

这边我们直接使用 PropertyChanged,当UI数据改变的时候,我们再通知到数据源去做修改。

还有一个属性就是Mode,他有五个参数:

枚举类型效果
OneWay源发生变化,数据就会从源流向目标
OneTime绑定会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。
OneWayToSource绑定会将数据从目标发送到源
TwoWay绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源
Default绑定的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay

这边明显有很多种选择,明确一点的是,我们是想把View上的变化同步到ViewModel(Target => Source),所以使用OneWayToSource、TwoWay、Default或者不写都可以。

严谨点应该使用OneWayToSource。因为是文本框,属于可以编辑控件,所以 Default指向的是TwoWay。

下面还有一个TextBlock,仅仅用于显示的,所以不需要目标对源的修改,无需指定就默认是OneWay,当源改变的时候,会通知它进行修改。

关于“MVVMLight怎么实现双向数据绑定”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MVVMLight怎么实现双向数据绑定

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MVVMLight怎么实现双向数据绑定

这篇文章主要介绍“MVVMLight怎么实现双向数据绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MVVMLight怎么实现双向数据绑定”文章能帮助大家解决问题。第一步:先写一个Model,里面
2023-06-29

vue双向数据绑定怎么实现

Vue的双向数据绑定是通过v-model指令来实现的。1. v-model是Vue提供的一个指令,用于在表单元素上实现双向数据绑定。可以将v-model绑定到一个Vue实例的data属性上,这样在表单元素中输入的值会自动同步到Vue实例的d
2023-08-09

vue 数据双向绑定怎么实现

这篇文章给大家分享的是有关vue 数据双向绑定怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 前言实现简易版的数据双向绑定2. 代码实现2.1 目的分析本文要实现的效果如下图所示:本文用到的HTML和
2023-06-06

angular双向数据绑定怎么实现

Angular双向数据绑定可以通过以下步骤来实现:1. 在HTML模板中使用双大括号({{}})将数据绑定到HTML元素上。例如:{{myData}}。2. 在组件类中定义和初始化要绑定的数据属性。例如,在组件类中定义一个名为myData的
2023-09-21

proxy怎么实现数据的双向绑定

本篇内容介绍了“proxy怎么实现数据的双向绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.写在前面随着 vue3.x 的消息越来越多
2023-06-03

Vue中怎么实现数据双向绑定

这篇文章主要介绍了Vue中怎么实现数据双向绑定的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中怎么实现数据双向绑定文章都会有所收获,下面我们一起来看看吧。在我们使用vue的时候,当数据发生了改变,界面也会
2023-07-04

怎么在vue中实现数据双向绑定

怎么在vue中实现数据双向绑定?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的
2023-06-14

wpf双向绑定怎么实现

WPF双向绑定可以通过以下步骤实现:1. 首先,在XAML中,将需要进行双向绑定的控件的`Mode`属性设置为`TwoWay`,例如:```xaml```2. 确保数据对象实现了`INotifyPropertyChanged`接口,该接口提
2023-09-06

vue如何实现数据双向绑定

Vue.js是一个流行的前端框架,它提供了多种方式来实现数据双向绑定。数据双向绑定是Vue.js最重要的特性之一,它使得开发者能够根据数据的变化自动更新视图,同时也能根据视图的变化自动更新数据。因此,Vue.js的数据双向绑定也成为前端面试题中常被问到的问题。本篇文章将着重介绍Vue.js实现数据双向绑定的原理及其具体实现方法。一、原理Vue.js的数据双向绑定是基于MVVM(
2023-05-14

详解用Vue怎么实现数据的双向绑定

如何用Vue.js实现数据的双向绑定? 在Vue.js中,双向数据绑定是一项非常强大的功能,它能够使数据和视图之间保持同步,让开发者更加方便地操作数据。在本文中,我们将介绍如何用Vue.js实现数据的
2023-05-14

使用Vue.js实现数据的双向绑定

在Vue.js中,双向数据绑定是一项非常强大的功能,它能够使数据和视图之间保持同步,让开发者更加方便地操作数据,在本文中,我们将介绍如何用Vue.js实现数据的双向绑定,需要的朋友可以参考下
2023-05-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录