//Slider进度条与TextBox间的数据绑定。
<SliderName="m_slider">Slider>
<TextBox Text="{Binding Value,ElementName=m_slider}"Name="m_text_main">TextBox>
//Value是m_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指主窗口,
}
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接口。
classMyClass:INotifyPropertyChanged//同样,此次要选择INotifyPropertyChanged,右键,解析得到命名空间,但还要增多一步:选择INotifyPropertyChanged,右键,实现接口。
{
privateint_age;
publicstringname
{
get;//这些是简写模式
set;
}
publicintage
{
get
{
return_age;
}
set
{
this._age=value;//value转到定义,?其实就是publicintage//这里暂时不知道这种机制
if(PropertyChanged!=null)//如果没有点击实现接口,就没有PropertyChanged这个成员
{
PropertyChanged(this,newPropertyChangedEventArgs("age"));//表明age属性发生了改变
}
}
}
publiceventPropertyChangedEventHandlerPropertyChanged;//自动产生的
}
//后面写个按钮,让m_me.age++就能看到效果了。下面是教程的板书
//ListBox
<ListBox>
<ListBoxItemContent="1">ListBoxItem>
<ListBoxItemContent="2">ListBoxItem>
ListBox>
//上面的代码可以用下面的代码表示
MyClassm_me=newMyClass();
privatevoidWindow_Loaded(objectsender,RoutedEventArgse)
{
m_me.name="乡巴佬";
m_me.age=23;
List<MyClass>m_list=newList<MyClass>();
m_list.Add(m_me);//把类对象加进去
m_lbName.ItemsSource=m_list;//ListBox标签“绑定该类”
}
//这样ListBox就可以显示该类对象了,但要显示该对象的哪个成员,还需在标签设置DisplayMemberPath
<ListBoxName="m_lbName"DisplayMemberPath="name"SelectedValuePath="age">ListBox>
//而SelectedValuePath则是为了获取选中项对应的类对象的某成员值。
privatevoidm_getAge_Click(objectsender,RoutedEventArgse)
{
objectm_age=m_lbName.SelectedValue;//注意这里是SelectedValue而标签处是SelectedValuePath
objectm_all=m_lbName.SelectedItem;//获取整个类对象,调试断点运行看看。
}
==============================================================
//DataGrid
首先创建一个类
classCClass
{
publicstringname//姓名
{get;set;}
publicboolisgirl//是否女生
{get;set;}
publicstringinclass//所在班级
{get;set;}
}
创建一个
privatevoidWindow_Loaded(objectsender,RoutedEventArgse)
{
//创建一个List供名称为m_dg_class的
List<CClass>m_lClass=newList<CClass>();
m_lClass.Add(newCClass{name="乡巴佬",isgirl=false,inclass="一班"});
m_lClass.Add(newCClass{name="乡下妹",isgirl=true,inclass="二班"});
m_lClass.Add(newCClass{name="乡下狗",isgirl=false,inclass="X班"});
m_dg_class.ItemsSource=m_lClass;
//
List<string>inclass=newList<string>();
inclass.Add("一班");
inclass.Add("二班");
m_dg_combo_class.ItemsSource=inclass;
}
看看界面代码
<DataGridName="m_dg_class"AutoGenerateColumns="False"CanUserAddRows="False"><DataGrid.Columns>
<DataGridTextColumnBinding="{Bindingname}"Header="姓名">DataGridTextColumn>
<DataGridCheckBoxColumnBinding="{Bindingisgirl}"Header="是否女生">DataGridCheckBoxColumn>
<DataGridComboBoxColumnx:Name="m_dg_combo_class"SelectedItemBinding="{Bindinginclass}">DataGridComboBoxColumn>
DataGrid.Columns>
DataGrid>
//AutoGenerateColumns:自动设置。CanUserAddRows用户可以自己增加行。
//DisplayMemberPath=”Name”表显示哪个变量的值,SelectedVauluPath=”Id”表获取以“”为条件的数据。SelectdeValuBingding绑定