使用StaticResource设置DataContext

时间:2012-11-11 18:09:51

标签: wpf viewmodel datacontext resourcedictionary

我正在尝试使用以下XAML代码将ViewModel设置为View的DataContext:

<UserControl.DataContext>
    <local:MyViewModel />
</UserControl.DataContext>

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MA_Resources/MA_ResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <local:MyViewModel x:Key="myViewModel" x:Name="myVM" />
    </ResourceDictionary>
</UserControl.Resources>

但是,我观察到视图模型构造函数被调用两次。我理解视图模型在XAML中被实例化两次,我应该将DataContext设置为来自Resources的StaticResource。但是,我无法弄清楚如何使用StaticResource设置DataContext。 我尝试了以下但是它给出了一个例外:

<UserControl .... DataContext="{StaticResource myViewModel}" >

请帮我弄清楚分配DataContext的XAML代码应该是什么。

1 个答案:

答案 0 :(得分:3)

如果稍后在xaml文件中定义静态资源,则无法引用静态资源。因此,您可以执行以下操作:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MA_Resources/MA_ResourceDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>

        <local:MyViewModel x:Key="myViewModel" x:Name="myVM" />
    </ResourceDictionary>
</UserControl.Resources>
<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="myViewModel"/>
</UserControl.DataContext>

我想知道为什么要将ViewModel定义为静态资源。就个人而言,我更喜欢DataContext

的setter中的实例化