C# WPF 快速开发04数据绑定、列表控件

C# WPF 快速开发04数据绑定、列表控件_第1张图片

//Slider进度条与TextBox间的数据绑定。

<SliderName="m_slider"></Slider>

<TextBox Text="{Binding Value,ElementName=m_slider}"Name="m_text_main"></TextBox>

//Valuem_slider的一个属性值

//数据绑定的类。C#类的添加:右键点击解决方案--添加--类;

1.创建一个类

class MyClass

    {

        public string name

        {

            get;

            set;

        }

        public string age

        {

            get;

            set;

        }

    }

2.给要绑定的控件设定DataContext

     MyClass m_me = new MyClass();//创建类并初始数据

        privatevoid Window_Loaded(objectsender, RoutedEventArgs e)

        {

            m_me.name = "乡巴佬";

            m_me.age = 23;

            m_txtName.DataContext = m_me;//让控件变量绑定类

            m_txtAge.DataContext = m_me;

    //上面两行代码可以用this.DataContext=m_me;代替。因为this指主窗口,<Grid>标签在里面,而这些控件在<Grid>里面,所以这样可以快速使某个标签里的所有控件快速绑定。另外,后面是还可以再绑定为另外的对象的,比如this.DataContext=m_me;m_txtAge.DataContext = m_her;(PS:this可以用标签名替换)

        }

3.控件绑定类的某成员变量

<TextBox Name="m_txtName" Text="{Binding name}"></TextBox>

<TextBox Name="m_txtAge" Text="{Binding age}"></TextBox>

//m_txtName是控件变量名称,name是第2步绑定的类的成员变量

//Binding name,UpdateSourceTrigger=PropertyChanged表改变界面项的值后同步修改数据源的值?然后在控件RowEditEnding时间中e.Row.DataContext获得修改后对象

效果如上,程序加载时就给类成员赋值,控件就间接接收并显示了。

//以上只能实现界面数据改变,后台类对象的成员值跟着改变。若在后台代码出修改类对象成员的值,与之绑定的控件的界面值是不会更新的。

//要实现双向数据通讯,还要让类实现INotifyPropertyChanged接口。

class MyClass:INotifyPropertyChanged //同样,此次要选择INotifyPropertyChanged,右键,解析得到命名空间,但还要增多一步:选择INotifyPropertyChanged,右键,实现接口

{

        private int _age;

        public string name

        {

            get; //这些是简写模式

            set;

        }

        public int age

        {

            get

            {

                return _age;

            }

set

{

         this._age = value;//value转到定义,?其实就是public int age//这里暂时不知道这种机制

         if (PropertyChanged != null)//如果没有点击实现接口,就没有PropertyChanged这个成员

{

PropertyChanged(this,new PropertyChangedEventArgs("age"));//表明age属性发了改变

}

}

}

        public event PropertyChangedEventHandler PropertyChanged; //自动产生的

}

//后面写个按钮,让m_me.age++就能看到效果了。下面是教程的板书

C# WPF 快速开发04数据绑定、列表控件_第2张图片

//ListBox

<ListBox>

<ListBoxItem Content="1"></ListBoxItem>

<ListBoxItem Content="2"></ListBoxItem>

</ListBox>

//上面的代码可以用下面的代码表示

MyClass m_me = new MyClass();

        private void Window_Loaded(object sender, RoutedEventArgs e)

        {

            m_me.name = "乡巴佬";

            m_me.age = 23;

            List<MyClass> m_list = new List<MyClass>();

            m_list.Add(m_me);//把类对象加进去

            m_lbName.ItemsSource = m_list;//ListBox标签绑定该类

        }

//这样ListBox就可以显示该类对象了,但要显示该对象的哪个成员,还需在标签设置DisplayMemberPath

<ListBox Name="m_lbName" DisplayMemberPath="name" SelectedValuePath="age"></ListBox>

//而SelectedValuePath则是为了获取选中项对应的类对象的某成员值。

        private void m_getAge_Click(object sender, RoutedEventArgs e)

        {

            object m_age = m_lbName.SelectedValue; //注意这里是SelectedValue而标签处是SelectedValuePath

            object m_all = m_lbName.SelectedItem; //获取整个类对象,调试断点运行看看。

        }

==============================================================

//DataGrid

首先创建一个类

class CClass

    {

        public string name //姓名

        { get;set;}

        public bool isgirl //是否女生

        { getset;}

        public string inclass //所在班级

        { get;set;}

    }

创建一个<DataGrid>标签后,先看看后台代码

 private void Window_Loaded(object sender, RoutedEventArgs e)

        {

//创建一个List供名称为m_dg_class<DataGrid>控件绑定

            List<CClass> m_lClass = new List<CClass>();

            m_lClass.Add(new CClass { name = "乡巴佬", isgirl = false, inclass = "一班" });

            m_lClass.Add(new CClass { name = "乡下妹", isgirl = true, inclass = "二班"});

            m_lClass.Add(new CClass { name = "乡下狗", isgirl = false, inclass = "X班" });

            m_dg_class.ItemsSource = m_lClass;

//<DataGrid>可以显示Combo控件,使用方法与常规不同,需新增一个List,注意新增的List没X班,用来测试的……

            List<string> inclass = new List<string>();

            inclass.Add("一班");

            inclass.Add("二班");

            m_dg_combo_class.ItemsSource = inclass;

        }

看看界面代码

<DataGrid Name="m_dg_class" AutoGenerateColumns="False" CanUserAddRows="False"><DataGrid.Columns>

       <DataGridTextColumn Binding="{Binding name}" Header="姓名"></DataGridTextColumn>

<DataGridCheckBoxColumn Binding="{Binding isgirl}" Header="是否女生"></DataGridCheckBoxColumn>

<DataGridComboBoxColumn x:Name="m_dg_combo_class" SelectedItemBinding="{Binding inclass}"></DataGridComboBoxColumn>

</DataGrid.Columns>
</DataGrid>

//AutoGenerateColumns:自动设置。CanUserAddRows用户可以自己增加行。

//DisplayMemberPath=Name表显示哪个变量的值,SelectedVauluPath=Id表获取以“”为条件的数据。SelectdeValuBingding绑定

C# WPF 快速开发04数据绑定、列表控件_第3张图片

 

 

你可能感兴趣的:(C#,WPF)