簡體   English   中英

WPF:XAML:給DataContext命名而不實例化它

[英]WPF: XAML: Give DataContext a name without instantiating it

在我的XAML中,我有一個UserControl1 ,我試圖將其綁定到MainWindowViewModelMainWindow

<ControlLib:UserControl1 Hotzenplotz="{Binding Raeuber, ElementName=vm}" />

HotzenplotzUserControl1DependenyProperty RaeuberMainWindowViewModel的屬性。

問題在於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM