有关WPF数据绑定的帮助
本文关键字:帮助 数据绑定 WPF 有关 | 更新日期: 2023-09-27 17:58:59
我是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; }
}
}
当程序启动时,我希望文本框显示"你好",但它是空的。
有人能告诉我我做错了什么吗?
您需要将Window的DataContext
设置为自身。
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
MyFoo = new Foo { Bar = "hello" };
}
这个命令告诉WPF在类中查找绑定。
每个控件都可以设置一个DataContext
,上面写着"当我绑定时,我想绑定到这个特定实例上的属性……这是继承的,所以如果你将MainWindow
的DataContext
设置为它自己,MainWindow
内部的所有控件都将绑定到MainWindow
上的属性。
您需要指定源。任一:
给窗口一个类似name="mywin"的名称,使用ElementName="mywin"更改绑定
或者将窗口DataContext设置为:
DataContext="{Binding ElementName="myWin"}-如果你不想要RelativeSource这个名称,你也可以使用它。我只是无法在未经测试的情况下发布它-绑定往往需要测试,正如你所注意到的:)
这可能会有所帮助:
http://blogs.msdn.com/b/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx