WPF之MVVM小任务实践

 刚了解MVVM框架没多久,看到群里有人提出相关的需求,就自个摸索实践了下。顺便练练手,熟练后就可以用于

实际项目开发了。实际需求的效果如下图:

不多说,先设计界面。

<Window x:Class="MyTestDb.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:MyTestDb.ViewModel"
        Title="MainWindow" Height="350" Width="675"
        WindowStartupLocation="CenterScreen">
    <Window.DataContext>
        <vm:MytestDbModelView/>
    </Window.DataContext>
    <Grid>
        <DataGrid AutoGenerateColumns="False" CanUserAddRows="False"  Height="200" HorizontalAlignment="Left" Margin="24,22,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="291" ItemsSource="{Binding myTestDbModel.Studentlst}" DataContext="{Binding}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="学号" Width="80" Binding="{Binding Path=StudentId}"/>
                <DataGridTextColumn Header="姓名" Width="50" Binding="{Binding Path=StudentName}"/>
                <DataGridTextColumn Header="性别" Width="30" Binding="{Binding Path=Gender}"/>
                <DataGridTextColumn Header="专业" Width="80" Binding="{Binding Path=SubjectId}"/>
                <DataGridTextColumn Header="宿舍" Width="50" Binding="{Binding Path=DomitoryId}"/>

            </DataGrid.Columns>

        </DataGrid>
        <DataGrid AutoGenerateColumns="False" CanUserAddRows ="False"  Height="200" HorizontalAlignment="Left" Margin="361,22,0,0" Name="dataGrid2" VerticalAlignment="Top" Width="262" ItemsSource="{Binding myTestDbModel.Domitorylst}">
          <DataGrid.Columns>
                <DataGridTextColumn Header="宿舍" Width="80" Binding="{Binding DomitoryId}" />
                <DataGridTextColumn Header="学院" Width="50" Binding="{Binding SubjectName}"/>
                <DataGridTextColumn Header="成员数" Width="50" Binding="{Binding MaxNumber}"/>
                <DataGridTextColumn Header="床位上限" Width="60" Binding="{Binding Members}"/>
          </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

ViewModel业务逻辑层。

namespace MyTestDb.ViewModel
{
    class MytestDbModelView
    {
        public MyTestDbModel testDbModel { get; set; }
        private Dictionary<string, string> map;

        public MytestDbModelView()
        {
            testDbModel = new MyTestDbModel();
            map = new Dictionary<string, string>();

            testDbModel.Domitorylst = SqlHelpers.GetDormitory().DefaultView;
            testDbModel.Studentlst = SqlHelpers.GetStudent().DefaultView;
            testDbModel.Subjectlst = SqlHelpers.GetSubjects().DefaultView;

            MappingSubjects();
            ChangeStudentlst();
        }

        private void MappingSubjects()
        {
            foreach (DataRowView drv in testDbModel.Subjectlst)
            {
                if (drv["Id"].Equals("03"))
                {
                    drv["SubjectName"] = "软件工程";
                }else if (drv["Id"].Equals("02"))
                {
                    drv["SubjectName"] = "自动化";
                }
                else
                {
                    drv["SubjectName"] = "网络工程";
                }

                map.Add(drv["Id"].ToString(), drv["SubjectName"].ToString());
            }
        }

        private void ChangeStudentlst()
        {
            foreach(DataRowView drv in testDbModel.Studentlst)
            {
                drv["SubjectId"] = map[drv["SubjectId"].ToString()];
                drv["StudentName"] = drv["StudentName"].ToString().Substring(0, 2);

                if (drv["StudentId"].Equals("13001006"))
                {
                    drv["StudentName"] = "刘老虎";
                }
            }
        }

        public MyTestDbModel myTestDbModel
        {
            get
            {
                return testDbModel;
            }
            set
            {
                if (testDbModel == value)
                    return;
                testDbModel = value;
            }
        } 
       
    }
}

Model数据层。

namespace MyTestDb.Model
{
    class MyTestDbModel : UINotifier
    {
        private DataView domitorylst;
        private DataView studentlst;
        private DataView subjectlst;

        public DataView Domitorylst
        {
            get
            {                
                return domitorylst;
            }
            set
            {
                domitorylst = value;
                OnPropertyChanged("Domitorylst");
            }
        }

        public DataView Studentlst
        {
            get
            {
                return studentlst;
            }
            set
            {
                studentlst = value;
                OnPropertyChanged("Studentlst");
            }
        }

        public DataView Subjectlst
        {
            get 
            { 
                return subjectlst;
            }
            set
            {
                subjectlst = value;
                OnPropertyChanged("Subjectlst");
            }
        }

    }

WPF做界面还是不错的,所见即所得,比QT designer要直观.还是不错,不过太局限于Windows平台了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值