WPF:XAML:为DataContext提供名称而不实例化它

时间:2018-02-17 10:58:33

标签: c# wpf mvvm

在我的XAML中,我有一个UserControl1,我试图绑定到MainWindowViewModel的{​​{1}}:

MainWindow

<ControlLib:UserControl1 Hotzenplotz="{Binding Raeuber, ElementName=vm}" /> Hotzenplotz DependenyPropertyUserControl1Raeuber的属性。

问题是MainWindowViewModel,因为我不希望XAML在ElementName=vm中查找属性,而是在UserControl1

中查找

如果我像这样绑定MainWindowViewModel,那么一切都很好看:

MainWindowViewModel

不幸的是我无法即时实例化<Window.DataContext> <local:MainWindowViewModel x:Name="vm" /> </Window.DataContext> ,我需要从代码端绑定它。但后来我无法弄清楚如何将MainWindowViewModel属性命名为DataContext以供将来参考。

修改

我这样解决了。我在vm

中添加了一个名称
MainWindow

并在<Window x:Name="mw" 属性

的帮助下访问绑定
DataContext

但这真的是正确的方法吗?

修改2

此处提供了工作代码:http://doena-soft.de/tmp/SubControls.zip

1 个答案:

答案 0 :(得分:0)

好的,我在这里找到了解决方案:Binding between my usercontrol and ViewModel

我将UserControl1绑定到自己的DataContext,就像这样:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

相反,现在我将UserControl1放在自己的XAML中,名称为“uc”,并将所有绑定都引用到此元素名称。

之前UserControl1内:

<Label x:Name="label1" Content="{Binding Hotzenplotz}" />

之后

<Label x:Name="label1" Content="{Binding Hotzenplotz, ElementName=uc}" />

为了完整起见,这是第二个解决方案:http://doena-soft.de/tmp/SubControls_better.zip