大佬教程收集整理的这篇文章主要介绍了WPF之MVVM解析,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class familymember { public String Name{get,set;}//姓名 public String Sex{get,set;}//性别(不使用bool,因为现在有中性人了) public String title{get,set;}//称谓 public int Age{set,get;}//年龄 }
class familymember { public String Name{get,get;}//年龄 }3.继续在models文件下再新建一个类family.cs,当然你可以不另外创建,直接写在familymember.cs里面
using System.Collections.Generic; //List类在此名称空间下 public class family//家庭类(就是familymember类的集合) public class family { private List<familymember> _family; public List<familymember> initfamily() { _family = new List<familymember>() { new familymember@R_618_9111@="王大爷",Age=120,Sex="男",title="太爷"},new familymember@R_618_9111@="王老爷",Age=80,title="爷爷"},new familymember @R_618_9111@="王中钱",Age=50,title="老爸"},new familymember @R_618_9111@="王夫人",Age=48,Sex="女",title="老妈"},new familymember @R_618_9111@ ="王大二",Age=25,title="大儿子"},new familymember @R_618_9111@="王八蛋",Age=20,title="小儿子"},new familymember @R_618_9111@ ="王小妹",Age=18,title="小女儿"} }; return _family ; } }4.设计我们的viewmodel文件,在viemodels文件夹下我们新建一个familyviewmodel.cs类
public class familymodelview { public List<familymember> myfamily { get; set; } public familymodelview() { //构造函数中初始化家庭成员列表 myfamily = new family().initfamily(); } }5.在views下面建一个文件familyview.xaml,这个是用来显示家庭成员的;
<Grid x:Name="LayoutRoot" BACkground="White"> <Grid.RowDeFinitions > <RowDeFinition Height="auto"/> <RowDeFinition /> </Grid.RowDeFinitions> <StackPanel Orientation="Horizontal" > <TextBlock Text="输入查询条件"/> <TextBox Name="txtsearch" Width="100" Height="23"/> <Button Name="btnsearch" Content="查询"/> <Button Name="btnadd" Content="添加"/> <Button Name="btndel" Content="@L_874_38@"/> </StackPanel> <sdk:DataGrid Grid.Row="1" Width="300" Name="mygrid" Itemssource="{Binding myfamily}" HorizontalAlignment="Left" IsReadOnly="True"> <sdk:DataGrid.columns> <sdk:DataGridTextcolumn Binding="{Binding NamE}" Header="姓名" Width="80"/> <sdk:DataGridTextcolumn Binding="{Binding titlE}" Header="称谓" Width="80"/> <sdk:DataGridTextcolumn Binding="{Binding Sex}" Header="性别" Width="50"/> <sdk:DataGridTextcolumn Binding="{Binding AgE}" Header="年龄" Width="50"/> <sdk:DataGridTemplatecolumn x:Name="c1" Header="@L_874_38@" > <sdk:DataGridTemplatecolumn.CellTemplate> <DataTemplate> <Button Name="btndelete" Content="Del" Click="btndelete_Click"/> </DataTemplate> </sdk:DataGridTemplatecolumn.CellTemplate> </sdk:DataGridTemplatecolumn> </sdk:DataGrid.columns> </sdk:DataGrid> </Grid>6.开始拼装,在Mainpage.xaml文件中写上
<Grid x:Name="LayoutRoot" BACkground="White" > <local:familyview/> </Grid>
public MainPage() { InitializeComponent(); this.LayoutRoot.DataContext = new familymodelview(); }
8.现在王小二娶了媳妇董雨进门,那么这个家庭列表就增加了,我们需要添加方法,如果是asp.net,在view.cs文件调用一下解决了,但这样那个xaml文件又复杂了,理性人和感性人又得纠结了。在mvvm中这个要玩的是familymodelview.cs这个文件。添加一个addmember方法
public void addmember(familymember p) { messageBox.Show("恭喜,你的家庭成员增加了"); }9.方法添加完了,我们需要把这个方法绑定到view里面的添加按钮上,这个时候就需要用到Icommand接口了。在commad下建一个relaycommand.cs
public class relaycommand:ICommand { private bool _isenabled; private Action _handler; public relaycommand(Action handler) { handler = _handler; } public bool IsEnabled { get { return _isenabled; } set { _isenabled = value; if (CanExecuteChanged != null) { this.CanExecuteChanged(this,EventArgs.Empty); } } } public bool CanExecute(object parameter) { //throw new NotImplementedException(); return IsEnabled; } public event EventHandler CanExecuteChanged; public void Execute(object parameter) { //throw new NotImplementedException(); _handler(); } }
public List<familymember> myfamily { get; set; } public String searchtext { get; set; }//这个是用于和那个搜索条件绑定用的 private ICommand _addfamilymembercommand; private ICommand _deletefamilymembercommand; private ICommand _searchmembercommand; public ICommand addfamilymembercommand { get { return _addfamilymembercommand; } } public ICommand deletefamilymembercommand { get { return _deletefamilymembercommand; } } public ICommand searchmembercommand { get { return _searchmembercommand; } } //构造函数 public familymodelview() { myfamily = new family().initfamily(); _searchmembercommand = new relaycommand(searchfamilymember) { IsEnabled = true }; _addfamilymembercommand = new relaycommand(addfamilymember) { IsEnabled = true }; _deletefamilymembercommand = new relaycommand(removefamilymember) { IsEnabled = true }; } //实现功能的方法 public void addfamilymember() { messageBox.Show("恭喜,你的家庭成员增加了"); } public void removefamilymember() { messageBox.Show("sorry,你的家庭成员减少了"); } public void searchfamilymember() { List<familymember> mylists = null; if (!String.IsNullOrEmpty(searchtext)) { mylists = new List<familymember>(); foreach (familymember p in myfamily) { if (p.Name.Contains(searchtext)) mylists.Add(p); } myfamily = mylists; } } }10.这个时候回到view界面,程序再狠,也不可能知道艺术家在xaml文件中发挥到天上还是地上,所以作为程序员的你还需要在多废点脑细胞,谁让你能呢!如果说view是个美人,那viewmodel是view背后的那个男人,view要发挥作用是离不开viewmodel的,在view的cs文件中写上:
public partial class familyview : UserControl { familymodelview family1 = new familymodelview(); public familyview() { InitializeComponent(); } private void btndelete_Click(object sender,RoutedEventArgs E) { family1. } private void btnsearch_Click(object sender,RoutedEventArgs E) { family1.searchtext = this.txtsearch.Text.Trim(); family1.searchmembercommand.Execute(null ); } }运行一下看看,点击添加和@L_874_38@,是不是提示成功了。别以为到这里就真的会了mvvm,仔细想想,是不是有一点感觉:绕老绕去的写了好多代码其实都是在做无用功,特别是那个Icommand接口。如果你这么想,就说明你真的用心学了。
<Button Name="btnsearch" Content="查询" Command="{Binding searchmembercommanD}"/> <Button Name="btnadd" Content="添加" Command="{Binding addfamilymembercommanD}" /> <Button Name="btndel" Content="@L_874_38@" Command="{Binding deletefamilymembercommanD}" />
以上是大佬教程为你收集整理的WPF之MVVM解析全部内容,希望文章能够帮你解决WPF之MVVM解析所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。