2017-01-31 73 views
0

我想知道我是否可以在主窗口資源部分有一個子窗口模型,並將其屬性綁定到主模型。我有第二個對第一個模型和串DependencyProperty一個簡單的字符串屬性,並試圖通過這種方式綁定:將資源屬性綁定到DataContext屬性

<Window.DataContext> 
    <local:MainWindowModel x:Name="MainWindowModel"/> 
</Window.DataContext> 
<Window.Resources> 
    <local:SecondWindowModel x:Key="SecondWindowModel" SecondString="{Binding FirstString}"/> 
</Window.Resources> 

SecondWindowModelDependencyObjectSecondStringDependencyProperty爲WPF需要。但SecondString始終爲空,它的setter永遠不會被調用。爲什麼?

回答

1

我的猜測是WPF將正確地將MainWindowModel視圖模型作爲Window的DataContext進行instanciate。
但是你的SecondWindowModel viewmodel是一個資源,實際上是一個靜態資源
而在C#中,一個靜態類只在第一次使用時初始化。 我不確定WPF是否在聲明時初始化其靜態資源。
您可以將一個靜態構造函數添加到帶有斷點的SecondWindowModel,並檢查它是否實際在MainWindowViewModel之前初始化或根本沒有。

+0

你的猜測是正確的,但可能有解決方法? –

+0

一個非常笨拙的做法是添加SecondWindowModel作爲控件的datacontext,給你的窗口添加ax:Name(如x:Name =「localContext」)並綁定SecondString(比如「{Binding ElementName = localContext Path = DataContext.FirstString}「)。但說實話,我不認爲WPF的視圖模型是用來這樣使用的。 – Seb

相關問題