silverlight 数据绑定Binding 之心得

一个数据绑定可以通过 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值