[英]WPF: XAML: Give DataContext a name without instantiating it
在我的XAML中,我有一個UserControl1
,我試圖將其綁定到MainWindowViewModel
的MainWindow
:
<ControlLib:UserControl1 Hotzenplotz="{Binding Raeuber, ElementName=vm}" />
Hotzenplotz
是UserControl1
的DependenyProperty
。 Raeuber
是MainWindowViewModel
的屬性。
問題在於ElementName=vm
因為我不希望XAML在UserControl1
而是在MainWindowViewModel
查找該屬性。
如果我像這樣綁定我的MainWindowViewModel
那么一切都會變得很桃花:
<Window.DataContext>
<local:MainWindowViewModel x:Name="vm" />
</Window.DataContext>
不幸的是,我無法即時實例化MainWindowViewModel
,我需要從代碼端進行綁定。 但是,然后我無法弄清楚如何為DataContext
屬性賦予名稱vm
以便將來參考。
編輯
我這樣解決了。 我在MainWindow
添加了一個名稱
<Window x:Name="mw"
並借助DataContext
屬性訪問綁定
<ControlLib:UserControl1 Hotzenplotz="{Binding Path=DataContext.Raeuber, ElementName=mw}" />
但這真的是正確的方法嗎?
編輯2
可在此處找到工作代碼: http : //doena-soft.de/tmp/SubControls.zip
好的,我在這里找到了解決方案: 在usercontrol和ViewModel之間進行綁定
我將UserControl1
綁定到了自己的DataContext
如下所示:
DataContext="{Binding RelativeSource={RelativeSource Self}}"
現在,我改為在其自己的XAML中為UserControl1
命名為“ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.