Wpf 我如何与相对资源自我绑定?

Wpf 我如何与相对资源自我绑定?,wpf,binding,Wpf,Binding,我正在尝试绑定Xaml中的几个不同属性: <Label Content="{Binding Description}" Visibility="{Binding Path=DescriptionVisibility, ElementName=_UserInputOutput}" FontSize="{Binding Path=FontSizeValue, ElementName=_UserInputOutput}" HorizontalAlignmen

我正在尝试绑定Xaml中的几个不同属性:

<Label Content="{Binding Description}" 
Visibility="{Binding Path=DescriptionVisibility, 
ElementName=_UserInputOutput}"               
FontSize="{Binding Path=FontSizeValue, ElementName=_UserInputOutput}"  
HorizontalAlignment="Left" VerticalAlignment="Top" Padding="0" />
每个绑定都有不同的名称,但大多数情况下都是这样。 我希望我的绑定能够使用:

{Binding Description}
而不是:

{Binding Path=Description, ElementName=_UserInputOutput}
它似乎只有在使用ElementName时才起作用。我需要导出/导入此XAML,因此我无法拥有ElementName,否则导入将无法工作

我觉得这样最好:

{Binding Path=Description, RelativeSource={RelativeSource Self}}
这不起作用


有什么想法吗??谢谢大家!

您尚未设置DataContext,RelativeSource正在使用DataContext来确定它与什么相关。您需要在更高的级别设置DataContext,如UserControl。我通常有:

<UserControl ... DataContext="{Binding RelativeSource={RelativeSource Self}}">
</UserControl>


这会告诉UserControl将自己绑定到codebehind中的类。

{RelativeSource Self}
以拥有要绑定的属性的对象为目标,如果在
标签上有这样的绑定,它将查找
Label.Description
,它不在那里。相反,您应该使用
{RelativeSource-AncestorType=UserControl}


没有源的绑定(
ElementName
source
RelativeSource
)是相对于
DataContext
的,但是在
UserControls
中,您不应该与外部绑定混淆。

“RelativeSource使用它来确定它相对于什么。”那句话显然是不正确的。另外,设置UserControl的DataContext很少是一个好主意……我认为这不是一个好主意,因为它违反了MVVM范式:当我们想将WPF与MVVM一起使用时,我们有一个绑定到其ViewModel的视图。因此,在视图的代码背后的构造函数中,我们说
View(){InitializeComponent();DataContext=new ViewModel();}
这使得所有数据绑定操作都在ViewModel上工作,因此我们可以将视图与ViewModel分开。可能有兴趣。
<UserControl ... DataContext="{Binding RelativeSource={RelativeSource Self}}">
</UserControl>