ICode9

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

WPF学习——创建一个基于mvvm模式的简单小示例

2021-07-21 14:01:23  阅读:175  来源: 互联网

标签:set string mvvm 示例 localDb get new WPF public


一个简单的界面,从数据库获取学生信息,呈现在表格中;点击搜索按钮查询姓名包含搜索条件的学生信息,点击重置按钮重新载入所有学生信息。

效果图如下图所示。

                

1、创建wpf项目,并添加prism框架的引用。

2、创建Models文件夹,并添加Student类

    class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Sex { get; set; }
    }

3、创建Db文件夹,并添加localDb类。这里要引用Models和SQLClient名称空间。

class localDb
    {
        public localDb()
        {
            
        }

        public List<Student> GetStudents()
        {
            List<Student> students = new List<Student>();
            string connString = Properties.Settings.Default.StudentDatabase;
            string sql = "SELECT [pid],[name],[age],[sex] FROM [test].[dbo].[Student]";
            using (SqlConnection conn=new SqlConnection(connString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql,conn);
                SqlDataReader sdr = cmd.ExecuteReader();
                while (sdr.Read())
                {
                    Student stu = new Student() { Id = (int)sdr["pid"],
                                                  Name=(string)sdr["name"], 
                                                  Age=(int)sdr["age"],
                                                  Sex=(string)sdr["sex"]  };
                    students.Add(stu);
                }
                return students;
            }
        }

        public List<Student> GetStudentsByName(string name)
        {
            localDb db = new localDb();
            List<Student> students = db.GetStudents();
            IEnumerable<Student> Matches =from s in students
                                      where s.Name.Contains(name)
                                      select s;
            return Matches.ToList();
            }
        }

这是我的数据库连接字符串,放在Property.Setting.Defalut.StudentDatabase属性中。

主要有两个方法,对数据库进行搜索,搜索全部学生信息,根据学生姓名包含字符串进行模糊搜索。数据库内容如下表所示。

4、创建ViewModels文件夹,并添加MainWindowViewModel类。

class MainWindowViewModel:BindableBase
    {
        public MainWindowViewModel()
        {
            localDb = new localDb();
            StudentInfoList = localDb.GetStudents();
            SelectCommand = new DelegateCommand(Select);
            ResetCommand = new DelegateCommand(Reset);
        }

        localDb localDb;
        private string search;

        public string Search
        {
            get { return search; }
            set
            {
                search = value;
                RaisePropertyChanged("Search");
            }
        }
        
        

        private List<Student> studentInfoList;

        public List<Student> StudentInfoList
        {
            get { return studentInfoList; }
            set
            {
                studentInfoList = value;
                RaisePropertyChanged("StudentInfoList");
            }
        }

        public DelegateCommand SelectCommand { get; set; }
        public DelegateCommand  ResetCommand{ get; set; }

        public void Select()
        {
          
            StudentInfoList = localDb.GetStudentsByName(search);
        }

        public void Reset()
        {
           
            StudentInfoList = localDb.GetStudents();
            Search = string.Empty;
        }


    }

引用Prism.Mvvm,Prism.Commands以及Db,Models名称空间。

Search用于Binding主界面搜索条件文本框中的字符串内容;

StudentInfoList用于接受学生信息,Binding主页面DataGird表格的ItemsSource。

两个命令用于Binding搜索和重置两个按钮的Command。

5、MainWindow.xaml.cs中添加代码,将主界面Window的DataContext与MainWindowViewModel实例绑定。

 public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel();
        }

 

6、打开MainWindow.xaml,对界面进行布局,并将控件相应的属性与MainWindowViewModel中的属性绑定。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="搜索条件:" Margin="5,5,0,5"/>
            <TextBox Width="100" Margin="5,5,0,5" Text="{Binding Search}"/>
            <Button Content="搜索" Width="100" Margin="5,5,0,5" Command="{Binding SelectCommand}"/>
            <Button Content="重置" Width="100" Margin="5"  Command="{Binding ResetCommand}"/>
        </StackPanel>
        <DataGrid Grid.Row="1" ColumnWidth="*" AutoGenerateColumns="False" CanUserAddRows="False"
                  ItemsSource="{Binding StudentInfoList}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="序号" Binding="{Binding Id}"/>
                <DataGridTextColumn Header="姓名" Binding="{Binding Name}"/>
                <DataGridTextColumn Header="年龄" Binding="{Binding Age}"/>
                <DataGridTextColumn Header="性别" Binding="{Binding Sex}"/>
            </DataGrid.Columns>
        </DataGrid>
     </Grid>

这样就大功告成了。

标签:set,string,mvvm,示例,localDb,get,new,WPF,public
来源: https://www.cnblogs.com/lch902268/p/15039143.html

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

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

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

ICode9版权所有