关于数据绑定的source 问题

a40528166 2016-12-07 10:30:26
student是个继承了inotifychanged的类 有name属性
我在xaml的后台代码上这么写可以绑定的上
Student stu = new Student();
this.tb1.SetBinding(TextBox.TextProperty, new Binding("Name") {Source = stu });
但是我在UI上这么写就绑定不上。(没有设置任何datacontext)
<TextBox Height="50" x:Name="tb1" Text="{Binding Path=Name,Source=stu}" />
在构造函数中声明stu的实例
是因为它自己不知道去哪找这个source吗
如果我想让这个tb1的text绑定到stu的Name属性 除了直接把tb1(或者其父类)的datacontext设置为stu这个实例外
能不能用source来完成
btw 有没有这么写的binding stu.Name

wpf好复杂 脑子不是很够 谢谢大家了。。。

最后的最后 没有有大家给说说combobox的selectedvalue 和selecteditem 有什么不同 是不是用itemsource的类型接受
如果进行绑定的话 要用什么类型的绑定呢 比如说itemsource是List<User> 用一个User类的实例能对selectedvalue进行绑定吗
...全文
169 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
exception92 2016-12-09
  • 打赏
  • 举报
回复
引用 4 楼 a40528166 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:] 能不能用source来完成 btw 有没有这么写的binding stu.Name -》 可以在后台 构造函数中 设置:this.DataContext = this; 必须指定DataContext,无论使用什么路径的绑定。 selectedvalue 一般指定为某个属性,该属性唯一。 selecteditem 一般为整个实体对象,默认为object类型。如果将itemsSource 指定为List<user> 那么该selecteditem 就为user实体对象。
Student stu = new Student(); public MainWindow() { InitializeComponent(); //或者把 Student stu = new Student();放这都不行 stu.Age = 1; stu.Name = "123"; this.DataContext = this; } 这样为什么都不行.. xmal..<TextBox Height="50" x:Name="tb1" Text="{Binding stu.Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding path=stu.Name}" /> [/quote] 因为放在构造函数中的 stu 不是一个全局对象,不是作为一个MainWindow的属性。 binding 通过逻辑树 向上找属性,这个源必须是属于this,也就是当前的窗体类中的某个对象或者属性。
a40528166 2016-12-09
  • 打赏
  • 举报
回复
引用 5 楼 duanzi_peng 的回复:
[quote=引用 4 楼 a40528166 的回复:] [quote=引用 2 楼 duanzi_peng 的回复:] 能不能用source来完成 btw 有没有这么写的binding stu.Name -》 可以在后台 构造函数中 设置:this.DataContext = this; 必须指定DataContext,无论使用什么路径的绑定。 selectedvalue 一般指定为某个属性,该属性唯一。 selecteditem 一般为整个实体对象,默认为object类型。如果将itemsSource 指定为List<user> 那么该selecteditem 就为user实体对象。
Student stu = new Student(); public MainWindow() { InitializeComponent(); //或者把 Student stu = new Student();放这都不行 stu.Age = 1; stu.Name = "123"; this.DataContext = this; } 这样为什么都不行.. xmal..<TextBox Height="50" x:Name="tb1" Text="{Binding stu.Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding path=stu.Name}" /> [/quote] 因为放在构造函数中的 stu 不是一个全局对象,不是作为一个MainWindow的属性。 binding 通过逻辑树 向上找属性,这个源必须是属于this,也就是当前的窗体类中的某个对象或者属性。[/quote] 把Student stu = new Student(); 放在了构造函数外也不行... 应该怎么写呢。。写到哪 才能让this.datecontext =this 后 找到这个变量 然后 xmal.. 用这个 <TextBox Height="50" x:Name="tb1" Text="{Binding stu.Name}" /> 还是 <TextBox Height="50" x:Name="tb1" Text="{Binding Name}" /> 呢
john_QQ:2335298917 2016-12-08
  • 打赏
  • 举报
回复
把stu设为window的变量,不能再函数里声明
a40528166 2016-12-08
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
能不能用source来完成 btw 有没有这么写的binding stu.Name -》 可以在后台 构造函数中 设置:this.DataContext = this; 必须指定DataContext,无论使用什么路径的绑定。 selectedvalue 一般指定为某个属性,该属性唯一。 selecteditem 一般为整个实体对象,默认为object类型。如果将itemsSource 指定为List<user> 那么该selecteditem 就为user实体对象。
Student stu = new Student(); public MainWindow() { InitializeComponent(); //或者把 Student stu = new Student();放这都不行 stu.Age = 1; stu.Name = "123"; this.DataContext = this; } 这样为什么都不行.. xmal..<TextBox Height="50" x:Name="tb1" Text="{Binding stu.Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding Name}" /> .<TextBox Height="50" x:Name="tb1" Text="{Binding path=stu.Name}" />
exception92 2016-12-08
  • 打赏
  • 举报
回复
能不能用source来完成 btw 有没有这么写的binding stu.Name -》 可以在后台 构造函数中 设置:this.DataContext = this; 必须指定DataContext,无论使用什么路径的绑定。 selectedvalue 一般指定为某个属性,该属性唯一。 selecteditem 一般为整个实体对象,默认为object类型。如果将itemsSource 指定为List<user> 那么该selecteditem 就为user实体对象。
threenewbee 2016-12-07
  • 打赏
  • 举报
回复
selectedvalue 和selecteditem 前者是值字段,后者是整个item

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧