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