帮助WPF数据绑定

时间:2011-06-13 20:27:46

标签: c# wpf xaml data-binding

我是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”,但它是空的。

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

2 个答案:

答案 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