我想知道我是否可以在主窗口资源部分中拥有子窗口模型,并将其属性绑定到主模型。我在第一个模型上有一个简单的字符串属性,在第二个模型上有一个字符串DependencyProperty
,并尝试以这种方式绑定:
<Window.DataContext>
<local:MainWindowModel x:Name="MainWindowModel"/>
</Window.DataContext>
<Window.Resources>
<local:SecondWindowModel x:Key="SecondWindowModel" SecondString="{Binding FirstString}"/>
</Window.Resources>
SecondWindowModel
是DependencyObject
,而SecondString
是DependencyProperty
,正如WPF所要求的那样。但SecondString
始终为null,从不调用其setter。为什么呢?
答案 0 :(得分:1)
我的猜测是WPF会正确地将MainWindowModel视图模型实例化为Window的DataContext。
但是你的SecondWindowModel视图模型是一个资源,实际上是一个静态资源。
在C#中,只有在第一次使用静态类时才会初始化它。
我不确定WPF是否在声明时初始化其静态资源。
您可以使用断点向SecondWindowModel添加静态构造函数,并检查它是否在MainWindowViewModel之前实际初始化,或者根本不是。