WPF绑定

在XAML中绑定另一控件的属性

 
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <TextBlock Name="txtbShow" Height="21" Margin="47,32,111,0" VerticalAlignment="Top" Text="{Binding ElementName=txtInput,Path=Text}" />
        <TextBox Name="txtInput" Height="23" Margin="47,70,111,0" VerticalAlignment="Top" />
    </Grid>
</Window>
 

在代码中绑定

//实例化绑定对象
Binding textBinding = new Binding();
//设置要绑定源控件
textBinding.Source = this.txtInput;
//设置要绑定属性
textBinding.Path = new PropertyPath("Text");
//设置绑定到要绑定的控件
this.txtbShow.SetBinding(TextBlock.TextProperty, textBinding);
 
 
双向绑定实现变更通知
 
namespace Demo1
{
   public  class Company:INotifyPropertyChanged
    {
        private string name;
        public event PropertyChangedEventHandler PropertyChanged;
        public string Name
        {
            get { return name; }
            set {
                name = value;
                if (this.PropertyChanged != null)
                { 
                    this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
                }
            }
        }
   }
}
 

绑定的方向

 

<TextBox x:Name="txtName" Text="{Binding Path=Name, Mode=TwoWay}"></TextBox>
<TextBox x:Name="txtName2" Text="{Binding  Path=Name, Mode=OneWay}"></TextBox>

这个在Binding时可以设置Mode.

image

oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标。

OneTime: 绑定也会将数据从源发送到目标;但是,仅当启动了应用程序或 DataContext 发生更改时才会如此操作,因此,它不会侦听源中的更改通知。

OneWayToSource: 绑定会将数据从目标发送到源。

TwoWay: 绑定会将源数据发送到目标,但如果目标属性的值发生变化,则会将它们发回给源。

Default: binding的模式根据实际情况来定,如果是可编辑的就是TwoWay,只读的就是OneWay.

上面的例子不设Mode时,默认的就是Default.

 

 

绑定对象

 

Company myCompany = new Company{ Name = "Microsoft"};
this.StackPanel1.DataContext = myCompany;
xaml中
<StackPanel x:Name =”StackPanel1”>

<TextBox x:Name="txtName" Text="{Binding Path=Name}"></TextBox>
<TextBox x:Name="txtName2" Text="{Binding  Path=Name}"></TextBox>
</StackPanel>

 

绑定集合

   public class EmployeeRespository
   {
       readonly List<Employee> _employees;

       public EmployeeRespository()
       {
           if (_employees == null)
           {
               _employees = new List<Employee>();
           }
           _employees.Add(new Employee() { Age = "33", Name = "Tom" });
           _employees.Add(new Employee() { Age = "32", Name = "Gravin" });
           _employees.Add(new Employee() { Age = "28", Name = "Alex" });
       }

       public List<Employee> AllEmployee
       {
	get
	{
           return _employees;
	}
        }
   }

<ListBox ItemsSource="{Binding AllEmployee}" SelectedIndex="0" >
     <ListBox.ItemTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <TextBlock Text="{Binding Name}" Margin="5"/>
                 <TextBlock Text="{Binding Age}" Margin="5"/>
             </StackPanel>
         </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

posted @ 2012-08-21 10:04  Sam.Sun  阅读(211)  评论(0)    收藏  举报