我是WPF的新手,我正在试图弄清楚数据绑定是如何工作的,但我没有太多运气。
我试图从简单的东西开始 - 将文本框的内容绑定到程序中的字符串变量。
我阅读了很多关于数据绑定,XML命名空间,标记扩展,资源,依赖属性等等的MSDN文档页面,但我仍然无法使其工作。
这是我的MainWindow.xaml:
<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:WpfTest"
Title="MainWindow">
<Grid>
<Grid.Resources>
<c:Foo x:Key="MyFoo"/>
</Grid.Resources>
<TextBox Width="100" Height="28"
Text="{Binding Source=MyFoo,
Path=BarProperty,
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
我的MainWindow.xaml.cs:
namespace WpfTest
{
public class Foo : DependencyObject
{
public static readonly DependencyProperty BarProperty = DependencyProperty.Register("Bar", typeof(String), typeof(Foo));
public String Bar
{
get { return (String)GetValue(BarProperty); }
set { SetValue(BarProperty, value); }
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyFoo = new Foo { Bar = "hello" };
}
public Foo MyFoo { get; set; }
}
}
我希望文本框在程序启动时显示“hello”,但它是空的。
有人能告诉我我做错了吗?
答案 0 :(得分:3)
您需要将窗口的DataContext
设置为自身。
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
MyFoo = new Foo { Bar = "hello" };
}
这告诉WPF在您的类中查找绑定。
每个控件都可以设置一个DataContext
,它表示“当我绑定时,我想绑定到这个特定实例上的属性......这是继承的,所以如果你设置了DataContext
MainWindow
本身MainWindow
内的所有控件都将绑定到MainWindow
上的属性。
答案 1 :(得分:1)
您需要指定来源。之一:
给窗口命名如Name =“mywin”,用ElementName =“myWin”改变你的绑定
或者将窗口DataContext设置为:
DataContext =“{Binding ElementName =”myWin“} - 你也可以使用RelativeSource,如果你不想要我不能发布它未经测试的名字 - 绑定往往需要测试,你也注意到了:)< / p>
这可能会有所帮助:
http://blogs.msdn.com/b/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx