WPF数据绑定问题

时间:2011-01-09 11:49:04

标签: wpf

我刚刚接触WPF。

我有一个wpf应用程序,我只有一个停靠面板和内部停靠面板我有一个文本块。

我想将textblock的text属性绑定到我的自定义对象的属性,但是“不起作用。”

我想我在这里遗漏了一些东西,但不知道是什么。

以下是代码段。

      <TextBlock Text="{Binding Source=myDataSource, Path=ColorName}"/>
</DockPanel>

我的自定义课程。

class MyData
    {
        public string ColorName { get; set; }
}

和主窗口构造函数..

public partial class MainWindow : Window
    {
        MyData myDataSource;
        public MainWindow()
        {
            InitializeComponent();
            myDataSource = new MyData { ColorName = "Red" };
    }
}

3 个答案:

答案 0 :(得分:1)

myDataSource需要get和set。您还需要为窗口设置dataContext,因此它应该是 -

public partial class MainWindow : Window
{
    public MyData MyDataSource { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
        MyDataSource = new MyData { ColorName = "Red" };
    }
}

public class MyData
{
    public string ColorName { get; set; }
}

和xaml代码应为 -

<TextBlock Text="{Binding MyDataSource.ColorName}"/>

编辑抱歉错了,我已经改为正确的代码

答案 1 :(得分:0)

  1. 你绑定的东西需要是一个 公共财产。 (您的数据对象也需要满足该条件)
  2. 除非您之前设置了该属性 InitializeComponent()绑定 可能不会更新,具体取决于您的绑定。
  3. 如果您在任何时候再次设置它 启动后的时间,并希望绑定更新你 应该实施 INotifyPropertyChanged或工作 具有依赖属性。
  4. 由于数据在您的窗口中,您可能需要通过以下方式访问它: {Binding ElementName = window,Path = myDataSource.ColorName}

答案 2 :(得分:0)

如果您只想绑定到MyData,请不要将窗口设置为自己的DataContext。 Istead,设置您绑定的数据。这样就更清楚了什么是数据,什么是视图。

此外,丢失Source Binding,您通常不需要它。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MyData { ColorName = "Red" };
    }
}

public class MyData
{
    public string ColorName { get; set; }
}

XAML:

<TextBlock Text="{Binding ColorName}"/>