1

我正在尝试使用以下 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 设置为资源中的 StaticResource。但是,我无法弄清楚如何使用 StaticResource 设置 DataContext。我尝试了以下方法,但它给出了一个例外:

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

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

4

1 回答 1

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>

I wonder why you want do define the ViewModel as a static resource. Personally, I would prefer the instantiation in the setter of the DataContext.

于 2012-11-11T18:20:20.497 回答