一个数据绑定可以通过 Binding 对象来描述,其中包含数据源,要绑定的属性路径(Path),目标,目标属性等。
其中目标属性必须是依赖属性(DependencyProperty)。
1) OneTime
当我们使用OneTime绑定模式的时候,当Source发生改变的时候不会通知Target,只有在Source初始化时才会将其绑定到Target上面。
2) OneWay
OneWay是绑定Mode的默认值,在这种绑定的模式下,当Source发生改变的时候会通知并响应到Target上,如果Source的属性发生改变的时候,Target上面的属性就会自动改变。当时Target发生改变的时候,不会通知Source.
3) TwoWay
TowWay模式是指Target跟Source之间的改变会相互影响,我们在一些表单详细时会经常用到。
第一种绑定方法:
<!--第一种:直接绑定一个Collection实体集合-->
<ListBox Height="239" HorizontalAlignment="Left" Margin="112,25,0,0"
Name="lbCollection" VerticalAlignment="Top" Width="198"
ItemsSource="{Binding}" SelectedValuePath="Author" DisplayMemberPath="Name" />
//获取实体集合
ObservableCollection<Info> list = Info.GetList();
//第一种数据源赋值
this.lbCollection.DataContext = list;
public class Info
{
public string Name { get; set; }
public string Author { get; set; }
public string Content { get; set; }
public string WriteDate { get; set; }
public static ObservableCollection<Info> GetList()
{
ObservableCollection<Info> list = new ObservableCollection<Info>();
list.Add(new Info() { Name = "文章一", Author = "作者一", Content = "内容一", WriteDate = "2009-02-03" });
list.Add(new Info() { Name = "文章二", Author = "作者二", Content = "内容二", WriteDate = "2009-03-03" });
list.Add(new Info() { Name = "文章三", Author = "作者三", Content = "内容三", WriteDate = "2009-04-03" });
list.Add(new Info() { Name = "文章四", Author = "作者四", Content = "内容四", WriteDate = "2009-05-03" });
list.Add(new Info() { Name = "文章五", Author = "作者五", Content = "内容五", WriteDate = "2009-06-03" });
list.Add(new Info() { Name = "文章六", Author = "作者六", Content = "内容六", WriteDate = "2009-07-03" });
return list;
}
}
<!--第二种:使用DataTemplate绑定一个Collection实体集合-->
<ListBox Height="239" HorizontalAlignment="Left" Margin="478,25,0,0"
Name="lbTemplate" ItemsSource="{Binding}" VerticalAlignment="Top" Width="198" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="3">
<sdk:Label Content="DocName:"></sdk:Label>
<TextBlock Text="{Binding Name}"></TextBlock>
<sdk:Label Content=" Author:"></sdk:Label>
<TextBlock Text="{Binding Author}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
//第二种数据源赋值
//获取实体集合
ObservableCollection<Info> list = Info.GetList();
this.lbTemplate.DataContext = list;
<!--第三种:使用绑定一个Detail详细信息-->
<StackPanel HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="top"
Width="500" Height="240" Margin="112,294,188,66">
<ListBox Height="239" HorizontalAlignment="Left" Name="lbDetail"
VerticalAlignment="Top" Width="198" ItemsSource="{Binding}"
SelectedValuePath="Author" DisplayMemberPath="Name" />
<StackPanel x:Name="spDetail" Width="300" Height="200">
<TextBlock FontWeight="Bold" Text="{Binding Name}" />
<TextBlock FontStyle="Italic" Text="{Binding Author}"/>
<TextBlock Text="{Binding Content}" />
<TextBlock Text="{Binding WriteDate}" />
</StackPanel>
</StackPanel>
//第三种数据源赋值
//获取实体集合
ObservableCollection<Info> list = Info.GetList();
CollectionViewSource collection = new CollectionViewSource { Source = list };
this.lbDetail.DataContext = collection;
this.spDetail.DataContext = collection;
后台动态绑定方法:
<TextBox x:Name="dateTextBox" />
var dateNow = DateTime.Now;varbinding =new Binding("dateNow");
binding.Source = dateNow;
binding.Mode = BindingMode.OneWay;
dateTextBox.SetBinding(TextBox.TextProperty, binding);
前台:
<TextBox x:Name="dateTextBox"Text="{BindingTimeOfDay,Mode=OneWay}" />
后台中我们指定了dateTextBox的DataContext属性:
var dateNow = DateTime.Now;
dateTextBox.DataContext = dateNow;
也可以如下:
<TextBox x:Name="dateTextBox"> <TextBox.Text> <Binding Path="TimeOfDay"Mode="OneWay"></Binding> </TextBox.Text></TextBox>
详细见 http://www.cnblogs.com/chengxingliang/archive/2012/03/12/2379305.html