广告
返回顶部
首页 > 资讯 > 精选 >MVVMLight怎么实现双向数据绑定
  • 690
分享到

MVVMLight怎么实现双向数据绑定

2023-06-29 01:06:42 690人浏览 薄情痞子
摘要

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

这篇文章主要介绍“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怎么实现双向数据绑定”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: MVVMLight怎么实现双向数据绑定

本文链接: https://www.lsjlt.com/news/321838.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MVVMLight怎么实现双向数据绑定
    这篇文章主要介绍“MVVMLight怎么实现双向数据绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MVVMLight怎么实现双向数据绑定”文章能帮助大家解决问题。第一步:先写一个Model,里面...
    99+
    2023-06-29
  • MVVMLight项目之双向数据绑定
    目录第一步:先写一个Model,里面包含我们需要的数据信息第二步:写一个ViewModel第三步:在ViewModelLocator中注册我们写好的ViewModel:第四步:编写V...
    99+
    2022-11-13
  • vue双向数据绑定怎么实现
    Vue的双向数据绑定是通过v-model指令来实现的。1. v-model是Vue提供的一个指令,用于在表单元素上实现双向数据绑定。...
    99+
    2023-08-09
    vue
  • angular双向数据绑定怎么实现
    Angular双向数据绑定可以通过以下步骤来实现:1. 在HTML模板中使用双大括号({{}})将数据绑定到HTML元素上。例如:{...
    99+
    2023-09-21
    angular
  • vue 数据双向绑定怎么实现
    这篇文章给大家分享的是有关vue 数据双向绑定怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 前言实现简易版的数据双向绑定2. 代码实现2.1 目的分析本文要实现的效果如下图所示:本文用到的HTML和...
    99+
    2023-06-06
  • Vue中怎么实现数据双向绑定
    这篇文章主要介绍了Vue中怎么实现数据双向绑定的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中怎么实现数据双向绑定文章都会有所收获,下面我们一起来看看吧。在我们使用vue的时候,当数据发生了改变,界面也会...
    99+
    2023-07-04
  • Vue 中怎么实现数据双向绑定
    本篇文章给大家分享的是有关 Vue 中怎么实现数据双向绑定,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MVVM 架构的优点低耦合。视图(Vi...
    99+
    2022-10-19
  • vue中双向数据绑定怎么实现
    vue中双向数据绑定是通过数据劫持结合发布订阅模式的方式来实现的,其核心方法是Object.defineProperty()方法。实现双向数据绑定的示例:<!DOCTYPE html><html><h...
    99+
    2022-10-11
  • proxy怎么实现数据的双向绑定
    本篇内容介绍了“proxy怎么实现数据的双向绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面随着 vue3.x 的消息越来越多,p...
    99+
    2023-06-03
  • vue实现双向数据绑定
    本文实例为大家分享了vue实现双向数据绑定的具体代码,供大家参考,具体内容如下 vue中数组与对象采用了不同的绑定方式 1.vue对象数据绑定 (1)数据侦测 在js中,我们使用Ob...
    99+
    2022-11-12
  • 怎么在vue中实现数据双向绑定
    怎么在vue中实现数据双向绑定?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的...
    99+
    2023-06-14
  • Vue2.0中怎么实现数据的双向绑定
    这篇文章给大家介绍Vue2.0中怎么实现数据的双向绑定,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现组件双向数据绑定在上一节中最后的示例使用的是Vue 1.0版本中的 .sync ...
    99+
    2022-10-19
  • angular+bootstrap怎么实现双向数据绑定实例
    这篇文章主要介绍angular+bootstrap怎么实现双向数据绑定实例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!doctype html...
    99+
    2022-10-19
  • wpf双向绑定怎么实现
    WPF双向绑定可以通过以下步骤实现:1. 首先,在XAML中,将需要进行双向绑定的控件的`Mode`属性设置为`TwoWay`,例如...
    99+
    2023-09-06
    wpf
  • Vue2.0怎么实现双向绑定
    这篇文章主要介绍了Vue2.0怎么实现双向绑定,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、实现双向绑定的做法前端MVVM最令人激动的就...
    99+
    2022-10-19
  • vue实现简单数据双向绑定
    本文实例为大家分享了vue实现简单数据双向绑定的具体代码,供大家参考,具体内容如下 这里是简单的实现,有助于新手理解消化,当然vue要实现双向数据代理不可缺少,期待后续在更新 vue...
    99+
    2022-11-12
  • vue如何实现数据双向绑定
    Vue.js是一个流行的前端框架,它提供了多种方式来实现数据双向绑定。数据双向绑定是Vue.js最重要的特性之一,它使得开发者能够根据数据的变化自动更新视图,同时也能根据视图的变化自动更新数据。因此,Vue.js的数据双向绑定也成为前端面试...
    99+
    2023-05-14
  • 详解用Vue怎么实现数据的双向绑定
    在Vue.js中,双向数据绑定是一项非常强大的功能,它能够使数据和视图之间保持同步,让开发者更加方便地操作数据。在本文中,我们将介绍如何用Vue.js实现数据的双向绑定。1. 理解双向绑定首先,我们需要了解双向绑定的原理。在Vue.js中...
    99+
    2023-05-14
    Vue.js
  • vue怎么使用defineProperty实现数据的双向绑定
    这篇文章主要讲解了“vue怎么使用defineProperty实现数据的双向绑定”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue怎么使用defineProperty实现数据的双向绑定”吧...
    99+
    2023-07-04
  • 怎么理解JavaScript数据双向绑定
    本篇内容介绍了“怎么理解JavaScript数据双向绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模板...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作