首先是静态类的绑定,,之后再写普通类的绑定
首先我有个静态类
public static class BaseColor { //当前全局颜色 private static IColor _PrevieColor= new Colors.ColorModel1(); public static IColor PrevieColor { get { return _PrevieColor; } set { _PrevieColor = value; SimulateNew("PrevieColor"); } } 可以这样绑定 Background="{Binding Source={x:Static cols:BaseColor.PrevieColor}
数据绑定,首先要有个对象。。。
//反正规定继承并实现这个接口,具体为什么,网上的帖子和书上说的太绕口。。反正也记不得,不如不记 class Person:INotifyPropertyChanged { string name; public string Name { get {return this.name;} set { name = value; } } int age; public int Age { get {return this.age;} set { age = value; } } //有参的构造函数 public Person(string name,int age) { this.name = name; this.age = age; } public Person(); //接口里定的一个事件,意思是属性发生改变时 public event PropertyChangedEventHandler PropertyChanged; //用一个方法,来触发这个事件 protected void Notify(string name) { if (PropertyChanged!=null) { PropertyChanged(this,new PropertyChangedEventArgs(name)); } } }
这个类很简单,总共两个属性和两个构造函数。。。。。那个事件可以不看,这边没有用到,懂事件的应该知道要怎么用
绑定数据,就一点要设置数据源。在wpf中,这个数据源可以在前台写,也可以在后台写。。。。。
但是,我觉得前台写死一个数据源没有必要,而且也不灵活。。所以不怎么感兴趣
下面是后台绑定数据源的方法,,,这里有两部分代码。。
前台:
<Window x:Class="mytest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:local="clr-namespace:mytest" > <!--上面这个local是自己定义的,,,但是后面的参数,是一个命名空间--> <!--注意以下所有标签的name属性,和binging--> <Grid Name="g1"> <TextBox Name="but" Text="{Binding Path=Name}" Width="150" Height="30" Margin="11,104,355,186" /> <TextBox Name="but1" Text="{Binding Path=Age}" Width="150" Height="30" Margin="11,10,357,280" /> </Grid> </Window>
后台:
Person person = new Person("sssss", 13); public MainWindow() { InitializeComponent(); this.but.DataContext = person;//只写这个,那么只有一个textbox被绑定值 this.but1.DataContext = person;//只写这个,那么也只有一个textbox被绑定值 this.g1.DataContext = person;//只写这个,两个textbox都会被设定值,因为Grid是两个textbox的父级标签, //在它上面设置数据源后,它的子级标签都可以享受数据源 }
当然也可以不需要后台:
<TextBlock Text="{Binding Path=s1}"> <!--在xml中实例化一个类,避免了在后台绑定--> <TextBlock.DataContext> <local:MyClass></local:MyClass> </TextBlock.DataContext> </TextBlock>