zoukankan      html  css  js  c++  java
  • windows8应用开发——数据绑定

    1、单条数据绑定

    ①建立数据类

      public class Employee
        {
            public string Name { get; set; }
            public int Number { get; set; }
            public string Post { get; set; }
            public Double Salary { get; set; }
            public Employee(string name, int number, string post, Double salary)
            {
                Name = name;
                Number = number;
                Post = post;
                Salary = salary;
            }
        }

    ②前台文本框

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Name="LayoutRoot">
            <TextBlock HorizontalAlignment="Left" Margin="441,131,0,0" TextWrapping="Wrap" Text="员工信息表" VerticalAlignment="Top" Height="60" FontSize="40"/>
            <TextBlock HorizontalAlignment="Left" Margin="352,221,0,0" TextWrapping="Wrap" Text="姓名:" VerticalAlignment="Top" FontSize="30" Height="60" Width="104"/>
            <TextBlock HorizontalAlignment="Left" Margin="352,286,0,0" TextWrapping="Wrap" Text="工号:" VerticalAlignment="Top" Width="90" Height="60" FontSize="30" RenderTransformOrigin="0.311,0.441"/>
            <TextBlock HorizontalAlignment="Left" Margin="352,346,0,0" TextWrapping="Wrap" Text="职务:" VerticalAlignment="Top" Width="90" Height="60" FontSize="30"/>
            <TextBlock HorizontalAlignment="Left" Margin="352,411,0,0" TextWrapping="Wrap" Text="薪资:" VerticalAlignment="Top" FontSize="30" Width="90" Height="60"/>
            <TextBox x:Name="NameTxb" HorizontalAlignment="Left" Margin="524,221,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" FontSize="25" Height="40"/>
            <TextBox x:Name="NumberTxb" HorizontalAlignment="Left" Margin="524,286,0,0" TextWrapping="Wrap" VerticalAlignment="Top" FontSize="25" Width="200" Height="40" RenderTransformOrigin="1.075,0.363"/>
            <TextBox x:Name="PostTxb" HorizontalAlignment="Left" Margin="524,346,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" Height="40" FontSize="25"/>
            <TextBox x:Name="SalaryTxb" HorizontalAlignment="Left" Margin="524,411,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="200" Height="40" FontSize="25"/>
    
        </Grid>

    ③后台绑定

    InitializeComponent();
                Employee employee = new Employee("小亮", 001, "经理", 15000);
                LayoutRoot.DataContext = employee;
                //绑定姓名
                Binding bindingName = new Binding();
                //设置绑定模式
                bindingName.Mode = BindingMode.OneWay;
                bindingName.Path = new PropertyPath("Name");
                NameTxb.SetBinding(TextBox.TextProperty, bindingName);
                //绑定工号
                Binding bindingNumber = new Binding();
                bindingNumber.Mode = BindingMode.OneWay;
                bindingNumber.Path = new PropertyPath("Number");
                NumberTxb.SetBinding(TextBox.TextProperty, bindingNumber);
                //绑定职务
                Binding bindingPost = new Binding();
                bindingPost.Mode = BindingMode.OneWay;
                bindingPost.Path = new PropertyPath("Post");
                PostTxb.SetBinding(TextBox.TextProperty, bindingPost);
                //绑定薪资
                Binding bindingSalary = new Binding();
                bindingSalary.Mode = BindingMode.OneWay;
                bindingSalary.Path = new PropertyPath("Salary");
                SalaryTxb.SetBinding(TextBox.TextProperty, bindingSalary);

    2、集合对象绑定

    ①前台布局

     <ComboBox x:Name="ShowComboBox" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="219,205,0,513" VerticalAlignment="Top" Width="380" FontSize="30" Height="50">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="姓名" FontSize="25" />
                            <TextBlock Text="{Binding Name}" FontSize="25" />
                            <TextBlock Text="年龄" FontSize="25" />
                            <TextBlock Text="{Binding Age}" FontSize="25" />
                        </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
            <Button Width="350" Height="60" Margin="638,293,0,415" FontSize="30" Content="参加集合数据" Click="Button_Click_1" />
            <Button Width="350" Height="60" Margin="638,218,0,490" FontSize="30" Content="修改Person对象数据" Click="Button_Click_2" />

    ②后台创建person类

        public class Person : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            public Person(string name, int age)
            {
                Name = name;
                Age = age;
            }
            private string _name;
            private int _age;
            public string Name
            {
                get { return _name; }
                set
                {
                    _name = value;
    
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                    }
                }
            }
            public int Age
            {
                get { return _age; }
                set
                {
                    _age = value;
                    if (PropertyChanged != null)
                    {
                        PropertyChanged(this, new PropertyChangedEventArgs("Age"));
                    }
                }
            }
    
        }

    ③初始化数据

    public ObservableCollection<Person> personList = new ObservableCollection<Person>();
            public MainPage()
            {
                this.InitializeComponent();
                personList.Add(new Person("Jack", 25));
                personList.Add(new Person("Tom", 10));
                personList.Add(new Person("Amy", 29));
                ShowComboBox.DataContext = personList;
            }

    ④实现添加修改功能

     private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                personList.Add(new Person("Tim", 30));
            }
    
            private void Button_Click_2(object sender, RoutedEventArgs e)
            {
                personList[0].Name = "Json";
                personList[0].Age = 20;
            }

    3、分层数据绑定

    ①声明数据资源实例

    <Page.Resources>
            <local:SchoolList x:Key="SchoolData"/>
            <CollectionViewSource x:Name="School" Source="{StaticResource SchoolData}"/>
            <CollectionViewSource x:Name="Grades" Source="{Binding Grades,Source={StaticResource School}}"/>
            <CollectionViewSource x:Name="Classes" Source="{Binding Classes,Source={StaticResource Grades}}"/>
        </Page.Resources>

    ②前台显示

     <ListBox ItemsSource="{Binding Source={StaticResource School}}" DisplayMemberPath="Name" Margin="100,50,0,766"/>
            <ListBox ItemsSource="{Binding Source={StaticResource Grades}}" DisplayMemberPath="Name" Margin="0,50,0,725"/>
            <ListBox ItemsSource="{Binding Source={StaticResource Classes}}" DisplayMemberPath="Name" Margin="0,50,0,685"/>
            <ContentControl Content="{Binding Source={StaticResource Classes}}" Margin="22,88,-22,-38">
                <ContentControl.ContentTemplate>
                    <DataTemplate>
                        <StackPanel Margin="5">
                            <StackPanel Orientation="Horizontal" Margin="10,10">
                                <TextBlock Text="男生人数:" Margin="0,0,5,0" FontSize="20"/>
                                <TextBlock Text="{Binding BoyNum}" FontSize="20"/>
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" Margin="10,0">
                                <TextBlock Text="女生人数:" Margin="0,0,5,0" FontSize="20"/>
                                <TextBlock Text="{Binding GirlNum}" FontSize="20"/>
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </ContentControl.ContentTemplate>
            </ContentControl>

    ③新建三个数据类

     public class Class
        {
            public string Name { get; set; }
            public int BoyNum { get; set; }
            public int GirlNum { get; set; }
        }
        public class Grade
        {
            public string Name { get; set; }
            public IEnumerable<Class> Classes { get; set; }
        }
        public class School
        {
            public string Name { get; set; }
            public IEnumerable<Grade> Grades { get; set; }
        }

    ④实现分级数据初始化

     public class SchoolList : List<School>
        {
            public SchoolList() { this.AddRange(GetSchool()); }
            public IEnumerable<School> GetSchool()
            {
                return from x in Enumerable.Range(1, 2)
                       select new School
                       {
                           Name = "学校" + x,
                           Grades = GetGrades(x)
                       };
            }
            public IEnumerable<Grade> GetGrades(int x)
            {
                return from y in Enumerable.Range(1, 3)
                       select new Grade
                       {
                           Name = String.Format("年级{0}-{1}", x, y),
                           Classes = GetClasses(x, y)
                       };
            }
            public IEnumerable<Class> GetClasses(int x, int y)
            {
                return from z in Enumerable.Range(1, 4)
                       select new Class
                       {
                           Name = String.Format("班级{0}-{1}-{2}", x, y, z),
                           BoyNum = 25 - (x * y * z),
                           GirlNum = x * y * z
                       };
            }
        }
  • 相关阅读:
    第15.28节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTableWidget详解
    PyQt学习随笔:QTableWidget的信号signal简介
    PyQt学习随笔:QTableWidget水平表头horizontalHeader、竖直表头verticalHeader的相关操作方法
    PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
    PyQt学习随笔:QTableWidget的visualRow、visualColumn、logicalRow、logicalColumn(可见行、逻辑行、可见列、逻辑列)相关概念及方法探究
    PyQt(Python+Qt)学习随笔:QTableWidget的获取指定位置项的item和itemAt方法
    PyQt(Python+Qt)学习随笔:QTableWidget的findItems和selectedItems搜索项和访问选中项方法
    PyQt(Python+Qt)学习随笔:QTableWidget的takeItem和sortItems方法
    PyQt(Python+Qt)学习随笔:QTableWidget项编辑方法editItem、openPersistentEditor
    PyQt(Python+Qt)学习随笔:QTableWidget设置项的setItem方法
  • 原文地址:https://www.cnblogs.com/danznb/p/3614753.html
Copyright © 2011-2022 走看看