WPF Bind设置了Source还需要对绑定控件的Content进行设置吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF Bind设置了Source还需要对绑定控件的Content进行设置吗?相关的知识,希望对你有一定的参考价值。

控件绑定一般是:
textBlock.Content = person;
BInding binding = new binding("PersonName");
textBlock.SetValue(TextBlock.BindingProperty, binding);

但在Binding中还有一个Source.这个Source是干什么用的呢?
如果是资源的话,是不是不用设置Content了?比如:
BInding binding = new binding("PersonName");
binding.Source = person;
textBlock.SetValue(TextBlock.BindingProperty, binding);

Binding binding = new Binding("PersonName");
binding.Source = person;
txtBlock.SetBinding(TextBlock.TextProperty, binding);

首先TextBlock没有Content属性,有Text属性。

Source是绑定对象中的一个参数,这个参数不一定要设置,需要看如何进行数据绑定。

然而设置绑定使用针对TextBlock的某一依赖属性的,这里应该是TextProPerty吧。


关于数据绑定,可以参考下博文:http://blog.csdn.net/rabbitsoft_1987/article/details/19297073

追问

是DataContext.
1直接将一个对象绑定至控件的DataContext,之后通过Binding指定依赖属性绑定的字段(SetBinding).
2将一个对象传给Binding的Source.之后通过Binding指定依赖属性绑定的字段(SetBinding).
以上两种区别就是数据源关联的方法: 一种是DataContext,一种是Binding的Source.
这两种等效吗?

追答

效果是一样的,是两种绑定的模式,可以看下上面的博文

            Binding bd=new Binding();
            bd.Path=new PropertyPath("id");
            bd.Source=parent;
            txtBlock1.SetBinding(TextBlock.TextProperty, bd);

            bd = new Binding();
            bd.Path = new PropertyPath("id");
            txtBlock2.SetBinding(TextBlock.TextProperty, bd);
            txtBlock2.DataContext = parent;
参考技术A Binding 的源(source)也就是数据的源头。Binding对源的要求并不苛刻------只要它是一个对象,并且通过属性(Property)公开自己的数据,它就能作为Binding 的源。
如果想让作为Binding源的对象具有自动通知Binding自己属性值已经已经变化的能力。那么就需要让类实现INotifyChanged接口并在属性的Set语句中激发PropertyChanged事件。在日常生活中,除了使用这种对象作为数据源之外,我们还有更多的选择,比如控件把自己的容器或子集元素当源、用一个控件做为另一个控件的数据源,把集合作为ItemControl的数据源、使用XML作为TreeView或Menu的数据源。把多个控件关联到一个“数据制高点”上,甚至干脆不给Binding指定数据源、让他自己去找。

WPF: WrapPanel 容器的数据绑定(动态生成控件遍历)

原文:WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)

问题:

? ? ? ?有一些CheckBox需要作为选项添加到页面上,但是数目不定。而为了方便排版,我选择用WrapPanel面板来作为父容器。那现在的问题就是如何把这些控件添加到这个WrapPanel里了。我想到了两个方法,第一个是先得到控件数目,然后再动态生成并加载到这个WrapPanel里,第二个是设置数据绑定。我想第一个是可行的,但是项目中还涉及到其它问题,所以这里就选择第二个了。问题来了,在WrapPanel中并没有可以用来设置绑定并实现动态生成的东西,那要怎么解决了?

办法:

新建一个ItemsControl控件,并为ItemsSource绑定数据源,然后把ItemsControl.ItemsPanel设置为WrapPanel,最后为ItemsControl.ItemTemplate中的CheckBox.Content绑定数据。


eg:

1、创建数据源类型。

public class business 
 { 
    public string txt { get; set; } 
 }
?

2、设置数据源

 public MainWindow()
  {
     this.InitializeComponent();
     List<business> che = new List<business>()
     {
        new business() { txt = "选项1"},
        new business() { txt = "选项2"},
        new business() { txt = "选项3"},
        new business() { txt = "选项4"},
        new business() { txt = "选项5"},
        new business() { txt = "选项6"},
        new business() { txt = "选项7"}				
     };
     ItemsControl.ItemsSource = che;
 }

3、Xaml中

<ItemsControl  x:Name="itemsControl"  Background="#B28BB2F1">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
          <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
          <Border Padding="3">
            <WrapPanel>
              <CheckBox  Content="{Binding txt}"/>
            </WrapPanel>
          </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
调试一下就OK了。



下一篇告诉你怎么遍历这个DataTemplate,并判断哪些checkBox被选中了。
















以上是关于WPF Bind设置了Source还需要对绑定控件的Content进行设置吗?的主要内容,如果未能解决你的问题,请参考以下文章

急等,在wpf中怎么才能把image控件的source属性绑定到listview中的选中项

在线等!怎么在wpf中利用后台的代码给定位置,大小和source,创建image,并在界面显示出来。

wpf image控件 绑定本地磁盘的图片 绝对路径的应该怎么写

WPF Binding学习

WPF: WrapPanel 容器的模板数据绑定(ItemsControl)

我可以将 HTML 绑定到 WPF Web 浏览器控件吗?