Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:我应该使用什么样的绑定将文本框与代码中声明的依赖项对象相关联?_C#_Wpf_Data Binding - Fatal编程技术网

C# WPF:我应该使用什么样的绑定将文本框与代码中声明的依赖项对象相关联?

C# WPF:我应该使用什么样的绑定将文本框与代码中声明的依赖项对象相关联?,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个DependencyObject类 public class TestDependency : DependencyObject { public static readonly DependencyProperty TestDateTimeProperty ... public DateTime TestDateTime {get... set..} } 我的窗户是这样的 public partial class MainWindow : Window{

我有一个DependencyObject类

public class TestDependency : DependencyObject
{
    public static readonly DependencyProperty TestDateTimeProperty ...

    public DateTime TestDateTime {get... set..}
}
我的窗户是这样的

public partial class MainWindow : Window{

    public TestDependency td;
    public MainWindow()
    {
        InitializeComponent();
        td = new TestDependency();
        td.TestDateTime = DateTime.Now;
    }
}
如果我想将MainWindow的依赖对象td(public TestDependency td;)的TestDateTime属性绑定到Xaml中的文本框,我该如何绑定它?这就是我现在正在做的


这根本不起作用。有人知道我需要更改什么吗?

我想你忘了在主窗口中设置
DataContext

public MainWindow()
{
    InitializeComponent();
    td = new TestDependency();
    td.TestDateTime = DateTime.Now;

    DataContext = this;
}
对于
td
,请使用属性而不是字段:

public TestDependency td { get; set; }
不要将
源代码
用于绑定,请使用
路径

<TextBlock Name="tb" Text="{Binding Path= td.TestDateTime, TargetNullValue=novalue}"/>

首先,您需要将
td
定义为属性而不是字段,因为您只能绑定到属性:

public TestDependency td { get; private set; }
然后,确保在窗口的构造函数中设置了数据上下文:

public MainWindow()
{
    td = new TestDependency();
    td.TestDateTime = DateTime.Now;
    this.DataContext = this;

    InitializeComponent();
}
最后,在XAML中设置绑定:

<TextBlock Name="tb" Text="{Binding Path=td.TestDateTime}" />


它可以工作!谢谢现在我想知道,当我将依赖项对象声明为字段时,为什么它不起作用?而且,在将其更改为属性之后,与作为字段相比,它在功能上有什么不同吗?正如我所提到的,WPF数据绑定不是设计用于字段的,只是用于属性。在本例中,功能没有区别-属性只是字段的抽象。啊,好的,现在我明白了。我注意到您在构造函数底部声明了
InitializeComponent()
,这是在构造函数中设置DataContext时的标准做法吗?是的,实际上建议这样做,因为否则将尝试两次绑定:一次是在调用
InitializeComponent
时,当设置了
DataContext
时,会出现另一种情况。这样,绑定只执行一次。