ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mvvm

2022-07-26 10:32:31  阅读:180  来源: 互联网

标签:set MVVM mvvm get ViewModel parameter public


    MVVM模式是Model-View-ViewModel的简称。


    1.Model层就是实体层,利用vs带的向项目中添加数据模型和向模型中添加代码生成项(自跟踪实体),可以快速方便的从数据库创建实体。


    这个也不是MVVM重点关注的。


    2.View层就是界面表现层,他包含展现给用户的具体页面,MVVM实现了表现层和业务逻辑层的彻底分离,这也是他的优势,更加方便了团队合作开发。


    采用MVVM模式做的项目,经常会发现界面后面几乎零代码,开始觉得很神奇,连一个事件都没有却实现了N多功能,这应该是归功于.Net平台的新特性,依赖属性。


    3.ViewModel层就是传统三层架构中的业务逻辑层,具体的业务逻辑就是在这里,这一层负责连接Model和View。这一层我认为是MVVM的核心。


     


    View和ViewModel通过两种属性连接在一起:数据属性和命令属性,为此我们需要为ViewModel准备两类:


    1.实现了INotifyPropertyChanged接口的类,假定我们给他起名叫BaseViewModel,则大致代码如下:


        public class BaseViewModel: INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;


            public void RaisePropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));                
            }
        }
    }


    他将是所有ViewModel类的基类。


    2.实现了ICommand接口的类,假定给他起名为DelegateCommand,则大致代码如下:


        public class DelegateCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            if (CanExecuteFunc != null)
            {
                return CanExecuteFunc(parameter);
            }
            return false;
        }


            public event EventHandler CanExecuteChanged;


            public void Execute(object parameter)
        {
            if (this.ExecuteAction != null)
            {
                this.ExecuteAction(parameter);
            }
        }


            public Action<object> ExecuteAction { get; set; }


            public Func<object, bool> CanExecuteFunc { get; set; }
    }


    我们现在假设有这么一个实体:


    public Class People


    {


       private string _name;


       public string Name


       {


           get{return _name;}


           set{ _name=value;}


       }


    }


    还有一个界面,上面有个Button还有个TextBox,要实现的功能就是 点击Button就将People实体一个对象的Name属性改为Jim并显示到TextBox上。


    ViewModel层中添加一个TestViewModel类:


            class TestViewModel : BaseViewModel
        {
            private People _people1;
            public People People1
            {
                get { return _people1; }
                set
                {
                    this._people1 = value;
                    this.RaisePropertyChanged("People1");
                }
            }
            public DelegateCommand ButtonCommand { get; set; }
            private void ButtonClick(object parameter)
            {
                this.People1.Name = "Jim";            
            }


                public TestViewModel()
            {
                this.ButtonCommand = new DelegateCommand();
                this.ButtonCommand.ExecuteAction = new Action<object>(this.ButtonClick);
            }
        }


    然后在在那个界面的Xaml文件为window标签添加资源(在这之前要先引入TestViewModel所在的名称空间,我起名为vm):


        <Window.Resources>
        <vm:TestViewModel x:Key="ViewModel"/>
    </Window.Resources>


    然后在Button和TextBox所在标签上添加:


    <Grid DataContext="{Binding Source={StaticResource ResourceKey=ViewModel}, Path=MyProperty}">


    最后一步,在那个界面的Xaml文件中找到TextBox标签,修改成这样:


    <TextBoxText="{Binding Name}"/>

 

标签:set,MVVM,mvvm,get,ViewModel,parameter,public
来源: https://www.cnblogs.com/devgis/p/16519977.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有