有关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; }
    }
}

当程序启动时,我希望文本框显示"你好",但它是空的。

有人能告诉我我做错了什么吗?

有关WPF数据绑定的帮助

您需要将Window的DataContext设置为自身。

public MainWindow()
{
    InitializeComponent();
    this.DataContext = this;
    MyFoo = new Foo { Bar = "hello" };
}

这个命令告诉WPF在类中查找绑定。

每个控件都可以设置一个DataContext,上面写着"当我绑定时,我想绑定到这个特定实例上的属性……这是继承的,所以如果你将MainWindowDataContext设置为它自己,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