work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WPF 绑定基础

Posted on 2011-09-13 23:18  work hard work smart  阅读(1554)  评论(0编辑  收藏  举报

Binding是Wpf的核心内容之一

1、下面是Binding基础的一个例子。

XAML:

    <Grid>
        <TextBox x:Name="myTextBox" Height="80" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200"/>
        <Button Height="23" HorizontalAlignment="Left" Margin="38,89,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click">Button</Button>
    </Grid>

     C# Code

  public partial class BindingTestxaml : Window
    {
        Customer cust;
        public BindingTestxaml()
        {
            InitializeComponent();
            BindingTest();
        }
        private void BindingTest()
        { 
            //准备数据源
            cust =  new Customer();
           // cust.Name = "Tom";

           //准备Binding
            Binding bind = new Binding();
            bind.Source = cust;
            bind.Path = new System.Windows.PropertyPath("Name");

            //使用Binding连接数据源与Binding目标
            BindingOperations.SetBinding(myTextBox, TextBox.TextProperty, bind);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            cust.Name += " Tom";
        }
    }

    public class Customer:INotifyPropertyChanged
    {
        private string name;

        public string Name 
        {
            get { return name; }

            set 
            {
                this.name = value;
                //激发事件
                if (PropertyChanged != null)
                    this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));

            }
        }

        #region INotifyPropertyChanged 成员

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion
    }

 当然上面的绑定也可以变成一句话的形式:如

 //使用Binding连接数据源与Binding目标
  BindingOperations.SetBinding(myTextBox, TextBox.TextProperty, new Binding("Name") { Source= cust =new Customer()});

 

2、没有Source的Binding——使用DataContext作为Binding的源,下面是一个简单的例子

先创建一个名为Sutdent的类,它有三个ID,Name,Age三个属性:

  public class Student
    {
        public string ID{ get; set;}
        public string Name { get; set; }
        public string Age { get; set; }
    }

然后XAML创建程序UI:

        <StackPanel Background="LightBlue" Margin="0,118,0,0" HorizontalAlignment="Right" Width="201" Height="122" VerticalAlignment="Top">
            <StackPanel.DataContext>
                <local:Student  ID="10" Name="Work Hard Work Smart" Age="30"/>
            </StackPanel.DataContext>
            <TextBox Height="23" HorizontalAlignment="Center" Margin="10"  Name="textBox10" VerticalAlignment="Top" Text="{Binding Path=ID}"  Width="164" />
            <TextBox Height="23" HorizontalAlignment="Center" Margin="10" Name="textBox11" VerticalAlignment="Top" Text="{Binding Path=Name}"  Width="164" />
            <TextBox Height="23" HorizontalAlignment="Center"  Name="textBox12" VerticalAlignment="Top" Text="{Binding Path=Age}"  Width="164" />
        </StackPanel>

三个TextBox的Text通过Binding获取值,Bindng指定了Path,没有指定Source。