照猫画虎WPF之二数据绑定

    数据绑定简而言之就是通过绑定数据源的形式,通过控件将数据展示出来。通过相关设置,使控件实现数据驱动,即当数据发生变化时,UI层展示数据同步变化。

包括:

(1)Source,数据源为后台自定义的数据类,要求绑定的属性为公有。

例如,声明数据源实体类(声明一个变量类,包括有压力、温度等属性,这里仅仅包含温度的实现)

namespace DataBinding
{
    public class Variable    

     {
        private int temperature;
        public int Temperature
        {
            get { return temperature; }
            set{ temperature = value; }
        }

    }
}

通过后台代码绑定显示

 

        public Page1()
        {
            InitializeComponent();
            Variable v = new Variable();
            v.Temperature = 10;                                               //初始温度为10°
            Binding binding = new Binding();                              //新建一个绑定对象

            binding.Source = v;                                                //指定绑定对象的数据源
            binding.Path = new PropertyPath("Temperature");      //指定绑定对象的对应属性
            BindingOperations.SetBinding(this.progressBar1, ProgressBar.ValueProperty, binding);      //将控件的相应属性与绑定对象关联
        }

 此时可以实现绑定展示数据源的属性值

 

     现在增加功能,加温或降温(温度值有可能内存动态修改,有可能底层数据库中修改,可以利用ServiceBroker实现,另外介绍),客户端实时展现底层数据变化,实现监控功能。

 

namespace DataBinding
{
    public class Variable : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged; // 这个接口仅包含一个事件而已  

        private int temperature;
        public int Temperature
        {
            get { return temperature; }
            set
            {
                temperature = value;
                if (this.PropertyChanged != null)                                  
                {
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Temperature")); // 通知UI“Temperature”属性值改变   
                }
            }
        }

    }
}

通过手动修改temperature的方式,模拟加温和降温

       private void button1_Click(object sender, RoutedEventArgs e)
        {
            v.Temperature += 10;
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            v.Temperature -= 10;
        }

 此时,可以通过数据绑定动态展现底层数据了

源代码

(2)ElementName,数据源为控件的依赖属性(可以看成是Source的特例,其数据源类型只能是控件),例如TextBox的字号,绑定到Slider的Value属性

 <Label Content="控件元素绑定" FontSize="{Binding ElementName=slider1, Path=Value}" Name="label1"  />    通过标记扩展方式实现

或者

 <Label Content="控件元素绑定"  Name="label1">         通过元素属性方式实现,优点是具有智能感知,而扩展方式没有智能感知
            <Label.FontSize>
                <Binding ElementName="slider1" Path="Value"  Mode="OneWay" />
            </Label.FontSize>
 </Label>

 

 

posted @ 2012-03-12 17:23  挑战  阅读(487)  评论(0编辑  收藏  举报