你的位置:首页 > ASP.net教程

[ASP.net教程]WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)


MVVM绑定

view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性。注:控件的绑定只能绑定到属性上,不能绑定到字段上;

接下来就是代码

(view):

 1 <Window x:Class="WpfBing.MainWindow" 2     "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3     "http://schemas.microsoft.com/winfx/2006/xaml" 4     "clr-namespace:WpfBing" 5     "clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 6     Title="MainWindow" Height="350" Width="525"> 7   <Grid> 8     <Grid.DataContext> 9       <vm:ViewModel/>10     </Grid.DataContext>11     <TextBox Text="{Binding Name,UpdateSourceTrigger=PropertyChanged}" Width="150" Height="30">12       <i:Interaction.Triggers>13         <i:EventTrigger EventName="TextChanged">14           <i:InvokeCommandAction Command="{Binding NameChanged}" />15         </i:EventTrigger>16       </i:Interaction.Triggers>17     </TextBox>18     <Button Content="测试" Command="{Binding UpdateData}" Width="150" Height="40" HorizontalAlignment="Right">19     </Button>20   </Grid>21 </Window>

说明:

 
该类的下载链接为:System.Windows.Interactivity
<Grid.DataContext>  <vm:ViewModel/> </Grid.DataContext> 数据源绑定,将该空间按的数据源绑定为vm空间下的ViewModel对象上;注:纯前台绑定的关键
 <i:Interaction.Triggers>
<i:EventTrigger EventName="TextChanged"> <i:InvokeCommandAction Command="{Binding NameChanged}" /> </i:EventTrigger></i:Interaction.Triggers>
通过触发器实现对控件事件的命令绑定,该代码需要添加System.Windows.Interactivity.dll的引用

(BaseClass):

 1 using System; 2 using System.Collections.Generic; 3 using System.Diagnostics; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using System.Windows.Input; 8  9 namespace WpfBing10 {11   public class RelayCommand : ICommand12   {13     #region 字段14     readonly Func<Boolean> _canExecute;15     readonly Action _execute;16     #endregion17 18     #region 构造函数19     public RelayCommand(Action execute)20       : this(execute, null)21     {22     }23 24     public RelayCommand(Action execute, Func<Boolean> canExecute)25     {26       if (execute == null)27         throw new ArgumentNullException("execute");28       _execute = execute;29       _canExecute = canExecute;30     }31     #endregion32 33     #region ICommand的成员34     public event EventHandler CanExecuteChanged35     {36       add37       {38 39         if (_canExecute != null)40           CommandManager.RequerySuggested += value;41       }42       remove43       {44 45         if (_canExecute != null)46           CommandManager.RequerySuggested -= value;47       }48     }49 50     [DebuggerStepThrough]51     public Boolean CanExecute(Object parameter)52     {53       return _canExecute == null ? true : _canExecute();54     }55 56     public void Execute(Object parameter)57     {58       _execute();59     }60     #endregion61   }62 }

说明:该段代码主要实现ICommand命令,实现该命令接口,通过委托调用调用ViewModel中相应的方法;

ICommand主要有两个方法,Excute,CanExcute,一个是调用的实现方法,一个是判断是否执行该调用方法;

注:功能上可以用来控制按钮或其他,控件状态是否可用

(viewmodel):

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Input;namespace WpfBing{  public class ViewModel:INotifyPropertyChanged  {    public event PropertyChangedEventHandler PropertyChanged;    public void Notify(string name)    {      if (PropertyChanged != null)      {        PropertyChanged(this, new PropertyChangedEventArgs(name));      }    }    private string name = "测试数据";    public string Name    {      get { return name; }      set      {        name = value;        Notify("Name");      }    }    void UpdateArtistNameExecute()    {      this.Name = "中孝介";    }    bool CanUpdateArtistNameExecute()    {      return true;    }    public ICommand UpdateData { get { return new RelayCommand(UpdateArtistNameExecute, CanUpdateArtistNameExecute); } }    public ICommand NameChanged { get { return new RelayCommand(NameChang); } }    private void NameChang()    {      string na = Name;    }  }}

说明:viewmodel中就是对一些事件流,数据流的控制了通过对数据,控制可以实现刷新前台数据,命令控制,可以访问业务层,等下层业务等;

 




去青海旅游必去景点去青海旅游要多少钱去青海旅游最佳路线深圳去宁夏旅游报价跟团去宁夏旅游多少钱明思克号航空母舰_明斯克号航母世界旅游景点介绍 2015年学生火车票优惠时间规定 14年放假安排时间表 2015湖南卫视春节联欢晚会节目单 2015清明节鲁冰花童话园门票多少钱?龙门鲁冰花童话园清明节门票价格? 来安徽做花痴 安徽赏花攻略(组图) 无奇不有的世界,这些怪异的婚礼习俗你可曾听过[三] 南粤苑特色是什么?番禺南粤苑有什么好吃的? 新兴天露山杜鹃花花期多长?云浮天露山杜鹃花开到什么时候? 霞客古渡自助游攻略?上林霞客古渡开车要多久? 新兴天露山漂流节好玩吗?2015天露山漂流节玩什么? 上林霞客古渡景区一日游攻略?霞客古渡景区路线? 马尔代夫潜水的最佳季节是?潜水时需要携带哪些装备? 泰式按摩怎么回事?有什么效果啊? 迪拜女人怎么样?中国男人可以娶一个迪拜女人吗? 泰国人喜欢跳什么舞啊?什么舞蹈最能代表泰国啊? AT28HC256E-12LM Datasheet AT28HC256E-12LM Datasheet AT28HC256E-12LM/883 Datasheet AT28HC256E-12LM/883 Datasheet AT28HC256E-12LM/883C Datasheet AT28HC256E-12LM/883C Datasheet 齐齐哈尔到港澳4日游 齐齐哈尔到港澳4日游 齐齐哈尔到港澳4日游 浙江香港二日游 浙江香港二日游 浙江香港二日游 佳木斯跟团香港两日游价格 佳木斯跟团香港两日游价格 佳木斯跟团香港两日游价格