我正在尝试用户控件中的简单绑定:
<UserControl x:Class="MyApp.FlowNode" ...>
<StackPanel>
<Label Content="{Binding Path=Header, RelativeSource={RelativeSource Self}}" />
</StackPanel>
</UserControl>
底层代码为:
public partial class FlowNode : UserControl
{
public FlowNode()
{
InitializeComponent();
}
public string Header { get { return "Testing"; } };
}
但是,标签保持空白。我做错了什么?
答案 0 :(得分:2)
{RelativeSource Self}
是指Label
个实例,而不是您的用户控件。
不应使用RelativeSource
,而应将UserControl的DataContext
设置为自身,就像karmicpuppet建议的那样。
答案 1 :(得分:0)
在构造函数中,将UserControl的DataContext设置为自身。 “this.DataContext = this”。并删除绑定中的RelativeSource。
答案 2 :(得分:0)
尝试使用
{Binding Path=Header, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FlowNode}}}.
答案 3 :(得分:0)
在我看来,在xaml中访问'Me'/'this'最方便的方法是在你的控件上放一个名字: &LT;用户控件 X:类= “MyApp.FlowNode” ... Name =“MyFlowNode”&gt; 然后,如果绑定到控件的属性或dp,则使用ElementName语法。
因此,您不要破坏控件的DataContext。
可能有一种方法可以使用RelativeSource FindAncestor绑定,但我认为没有优势。
但不将Control的DataContext设置为自身,否则会失去对其DataContext的认识。