【问题标题】:Setting DataContext using StaticResource使用 StaticResource 设置 DataContext
【发布时间】:2012-11-11 18:09:50
【问题描述】:

我正在尝试使用以下 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 代码。

【问题讨论】:

    标签: wpf viewmodel datacontext resourcedictionary


    【解决方案1】:

    如果稍后在 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 的设置器中实例化。

    【讨论】:

    • 问题是,如果您将属性绑定到不继承 datacontext 的东西(即 DataGridColumn 的 Visibility 属性),那么使用 source= 进行绑定会容易得多{StaticResource VM}。
    • 对于 d:DataContext,使用:d:UserControl.DataContext
    猜你喜欢
    • 2011-03-30
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多