将资源属性绑定到DataContext属性

时间:2017-01-31 22:09:08

标签: c# wpf binding

我想知道我是否可以在主窗口资源部分中拥有子窗口模型,并将其属性绑定到主模型。我在第一个模型上有一个简单的字符串属性,在第二个模型上有一个字符串DependencyProperty,并尝试以这种方式绑定:

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

SecondWindowModelDependencyObject,而SecondStringDependencyProperty,正如WPF所要求的那样。但SecondString始终为null,从不调用其setter。为什么呢?

1 个答案:

答案 0 :(得分:1)

我的猜测是WPF会正确地将MainWindowModel视图模型实例化为Window的DataContext。
但是你的SecondWindowModel视图模型是一个资源,实际上是一个静态资源
在C#中,只有在第一次使用静态类时才会初始化它。 我不确定WPF是否在声明时初始化其静态资源。
您可以使用断点向SecondWindowModel添加静态构造函数,并检查它是否在MainWindowViewModel之前实际初始化,或者根本不是。