千家信息网

MVVMLight项目的绑定及使用方法是什么

发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍"MVVMLight项目的绑定及使用方法是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"MVVMLight项目的绑定及使用方法是什么"文章
千家信息网最后更新 2025年11月15日MVVMLight项目的绑定及使用方法是什么

这篇文章主要介绍"MVVMLight项目的绑定及使用方法是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"MVVMLight项目的绑定及使用方法是什么"文章能帮助大家解决问题。

    一、绑定:

    主要包含元素绑定和非元素绑定两种。

    1、元素绑定:

    是绑定的最简单形式,源对象是WPF的元素,并且源对象的属性是依赖项属性。

    根据我们之前的知识 ,依赖项属性具有内置的更改通知支持。所以当我们的源对象中改变依赖项属性的值时,会立即更新目标对象中的绑定属性。

    以上篇的例子来重写,我们不用额外定义全局公开的属性来支持数据的显示。

    如下:

                          

    TextBlock 绑定了名称为WelcomeText的元素,并且将Path指向Text属性,所以他的值会跟着 WelcomeText的变化而变化。

    2、非元素类型绑定:

    2.1 Source属性:

    绑定具体的数据对象:如系统信息跟我们定义的资源数据。

    定义Window下的全局资源

                  Red     

    应用到视图中

                    

    结果:

    2.2 RelativeSource 属性:

    设置该属性 可以根据当前目标对象的相对关系指向源目标。比如获取当前对象的父亲对象、兄弟对象或者自身的其他属性等一些数据。

                                                                                                                                     

    代码很容易理解,这边在创建RelativeSource的时候,mode模式有四种类型:

    Mode成员名称说明
    FindAncestor

    引用数据绑定元素的父链中的上级。 这可用于绑定到特定类型的上级或其子类。 若要指定 AncestorType 和/或 AncestorLevel,这就是应使用的模式。

    PreviousData

    允许在当前显示的数据项列表中绑定上一个数据项(不是包含数据项的控件)。

    Self

    引用正在其上设置绑定的元素,并允许你将该元素的一个属性绑定到同一元素的其他属性上。

    TemplatedParent

    引用应用了模板的元素,其中此模板中存在数据绑定元素。 这类似于设置 TemplateBindingExtension,且仅在 Binding 位于模板内部时适用。

    注意:AncestorType 指得是查找的对象类型,AncestorLevel 代表搜索的层级的位置,如果是3,则忽略前两个发现的元素。

    结果:

    2.3 DataContext 属性:

    如果想将一个对象绑定到一个由多个元素组成的视图块或者复合元素中,用DataContext 会更好开发和维护。如下

                                                    

    二、绑定的各种使用场景:

    数据绑定有普通的控件绑定应用:比如 下拉框、单选框、复选框、普通文本框 、日期框等;

    复杂的绑定有数据列表绑定,用户控件信息绑定等,比如 ListBox,DataGrid,UserControl绑定等。

    1、下拉框:

    View代码:

                                                                                            

    Model代码:

     public class ComplexInfoModel:ObservableObject    {        private String key;        ///         /// Key值        ///         public String Key        {            get { return key; }            set { key = value; RaisePropertyChanged(()=>Key); }        }        private String text;        ///         /// Text值        ///         public String Text        {            get { return text; }            set { text = value; RaisePropertyChanged(()=>Text); }        }    }

    ViewModel代码:

            #region 下拉框相关         private ComplexInfoModel combboxItem;         ///          /// 下拉框选中信息         ///          public ComplexInfoModel CombboxItem         {             get { return combboxItem; }             set { combboxItem = value; RaisePropertyChanged(() => CombboxItem); }         }           private List combboxList;         ///          /// 下拉框列表         ///          public List CombboxList         {             get { return combboxList; }             set { combboxList = value; RaisePropertyChanged(()=>CombboxList); }         }         #endregio

    说明:CombboxItem是一个全局的属性,作用在当前页面的数据上下文中,结果显示的内容指向下拉框中的选中值,达到共用一个数据的目的。

    这边有四个地方需要注意的:ItemsSource:数据源;SelectedItem:选中的项;DisplayMemberPath:绑定时显示的所属值;SelectedValuePath :绑定时候key的所属值。

    结果:

    2、单选框

                                                                                                                                               

    说明:注意这边使用到了两个属性: SingleRadio,IsSingleRadioCheck,一个用于显示单选框内容,一个用于表示是否选中

    结果:

    3、组合单选框

    我们一般会用单选框做组合表示唯一选项,比如性别包含男女,但是只能选择一个。而更多的场景是包含多个选项,但是只能单选的,这时候就需要做单选框组。

                                                                                                                                                                                                                                                                                                      

    这边使用了ItemsControl,可以根据模板来定义内容,我们在模板中放置我们需要用到的内容。这边需要注意的是:GroupName用一样的,来代表这是一个单选控件组合。

    这边有是三个属性进行绑定相关:

    RadioButtons:单选框列表数据(循环绑定);Content:单选框显示的内容;IsCheck:单选框的是否选中。

    结果:

    4、复选框,复选框与单选框的使用情况类似:

                                                                                                                                                                                                                                                                                                            

    结果:

    5、树形控件

    View代码:

                                                                                                                                                                                                                                                                                                                                                                                                

    Model代码

      public class TreeNodeModel : ObservableObject     {         public string NodeID { get; set; }         public string NodeName { get; set; }         public List Children { get; set; }     }

    ViewModel代码

     #region 树控件        private List treeInfo;        ///         /// 树控件数据信息        ///         public List TreeInfo        {            get { return treeInfo; }            set { treeInfo = value; RaisePropertyChanged(()=>TreeInfo); }        }  #endregion

    结果:

    6、ListBox

    当我们需要用到循环的列表内容,并且模板化程度高的时候,建议使用ListBox来做绑定。

    View代码:

                                                                                                                                                                                                                                                                                                                                                                                                              

    ViewModel代码:

         #region ListBox 模板      private IEnumerable listBoxData;      ///       /// LisBox数据模板      ///       public IEnumerable ListBoxData      {          get { return listBoxData; }          set { listBoxData = value;RaisePropertyChanged(()=>ListBoxData); }      }      #endregion

    初始数据:

    private void InitListBoxList()     {      ListBoxData = new ObservableCollection(){        new { Img="/MVVMLightDemo;component/Images/1.jpg",Info="樱桃" },        new { Img="/MVVMLightDemo;component/Images/2.jpg",Info="葡萄" },        new { Img="/MVVMLightDemo;component/Images/3.jpg",Info="苹果" },        new { Img="/MVVMLightDemo;component/Images/4.jpg",Info="猕猴桃" },        new { Img="/MVVMLightDemo;component/Images/5.jpg",Info="柠檬" },     };

    结果:

    7、用户控件的集合绑定:

    ListBox的列表绑定远远不能满足我们实际工作中的需求,

    出于对灵活性、复用性以及代码精简的考虑,需要保证循环列表中的单个元素是独立的元素片段,类似Web中的局部视图。 这时候,使用用户控件会好很多。

    我们先写一个用户控件,分别设置了他的样式和绑定的属性值,如下:

                                                                                                                    

    在目标视图页面注册并使用:

    xmlns:Content="clr-namespace:MVVMLightDemo.Content"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

    结果:

    关于"MVVMLight项目的绑定及使用方法是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

    0