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.
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>


浙公网安备 33010602011771号