C# 什么是「;当前数据上下文“;?
我在这里使用WPF绑定备忘表:C# 什么是「;当前数据上下文“;?,c#,wpf,C#,Wpf,我在这里使用WPF绑定备忘表: 我注意到它指的是像{Binding}和{Binding Name}这样的东西的“当前数据上下文”。在我看到的示例中,根窗口的DataContext被设置为某个对象,树中的几个级别的子控件能够绑定到它,而无需指定它所引用的元素的数据上下文。所以我的问题有两个: 什么是当前数据上下文,它是如何定义为“当前”的 作为#1的后续问题,当前数据上下文的“搜索顺序”(如果有)是什么?我的理解是,每个WPF控件都可以有自己的数据上下文,因此: 它是否只搜索父/子树,直到找到定
我注意到它指的是像
{Binding}
和{Binding Name}
这样的东西的“当前数据上下文”。在我看到的示例中,根窗口的DataContext被设置为某个对象,树中的几个级别的子控件能够绑定到它,而无需指定它所引用的元素的数据上下文。所以我的问题有两个:
提前感谢。
DataContext
是可继承的依赖属性,即除非明确设置,否则子控件将继承它
您甚至可以通过在注册依赖项属性时设置FrameworkPropertyMetadataOptions.Inherits
标志,使自定义依赖项属性可继承
话虽如此,让我们逐一回答您的问题: 1) 什么是当前数据上下文,它是如何定义为“当前”的 Current表示当前为DataContext设置的值,可以显式设置,也可以从其父级继承 2) 它是否只搜索父/子树,直到找到定义了DataContext的第一个父级 是的,你的猜测是对的 3) 如果在DataContext上找不到指定的属性怎么办, 它是否跳过该属性并查找具有该属性的下一个数据上下文 否,如果在DataContext上找不到该属性,绑定将以静默方式断开,错误将记录在输出窗口中。 但是,如果绑定失败,您可以给出
FallbackValue
假设您有如下声明的TextBlock:
<TextBlock Text="{Binding Name, FallbackValue=BindingFailed}"/>
将在当前数据上下文中搜索第一个
Name
属性。如果将显示找到的文本,但如果未找到属性,则文本将设置为BindingFailed
DataContext
是可继承的依赖属性,即除非明确设置,否则子控件将继承它
您甚至可以通过在注册依赖项属性时设置FrameworkPropertyMetadataOptions.Inherits
标志,使自定义依赖项属性可继承
话虽如此,让我们逐一回答您的问题: 1) 什么是当前数据上下文,它是如何定义为“当前”的 Current表示当前为DataContext设置的值,可以显式设置,也可以从其父级继承 2) 它是否只搜索父/子树,直到找到定义了DataContext的第一个父级 是的,你的猜测是对的 3) 如果在DataContext上找不到指定的属性怎么办, 它是否跳过该属性并查找具有该属性的下一个数据上下文 否,如果在DataContext上找不到该属性,绑定将以静默方式断开,错误将记录在输出窗口中。 但是,如果绑定失败,您可以给出
FallbackValue
假设您有如下声明的TextBlock:
<TextBlock Text="{Binding Name, FallbackValue=BindingFailed}"/>
将在当前数据上下文中搜索第一个
Name
属性。如果将显示找到的文本,但如果未找到属性,则文本将设置为BindingFailed
如果未明确设置DataContext
,则它等于其父级DataContext
。父母也一样。就是这样。@Johnbot那么这是否意味着这有助于在父/子树上遍历,直到找到一个父/子树,或者如果子树的DataContext未设置,则子树只能直接引用其父树?是否意味着它遍历树。查看答案。如果未明确设置DataContext
,则它等于其父级DataContext
。父母也一样。就是这样。@Johnbot那么这是否意味着这有助于在父/子树上遍历,直到找到一个父/子树,或者如果子树的DataContext未设置,则子树只能直接引用其父树?是否意味着它遍历树。看看答案。这很有帮助,非常感谢。我在发帖后也读了这篇文章,这篇文章有助于完全澄清你的回答:欢迎你,罗伯特。我同意雷切尔的博客也提供了丰富的信息这很有帮助,非常感谢。我在发帖后也读了这篇文章,这篇文章有助于完全澄清你的回答:欢迎你,罗伯特。我同意雷切尔的博客也提供了丰富的信息