为什么我不能在xaml中设置静态资源&x; x:Name

时间:2016-04-01 12:42:47

标签: c# wpf xaml

我有一个View模型,我试图在我的用户控件的资源字典中定义它并将其设置为数据上下文,如下所示:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/DMV;component/Controls.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <vm:TaskViewModel x:Key="taskViewModelKey" x:Name="taskViewModelName" />
    </ResourceDictionary>
</UserControl.Resources>

<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="taskViewModelKey"/>
</UserControl.DataContext>

但字段&#39; x:Name =&#34; taskViewModelName&#34;&#39;显示错误:

  

无法注册重复的名称&#39; taskViewModelName&#39;在此范围内

我正在尝试设置x:datacontext的名称,以便我仍然可以从后面的代码中访问它。

有关如何解决此错误的任何建议?

1 个答案:

答案 0 :(得分:3)

  

我正在尝试设置x:datacontext的名称,以便我仍然可以   从后面的代码中访问它

首先,没有必要将视图模型放在资源中,如果唯一的目标是稍后初始化数据上下文。只需直接初始化数据上下文:

<UserControl.DataContext>
    <vm:TaskViewModel />
</UserControl.DataContext>

并在代码隐藏中使用(TaskViewModel)DataContext。 其次,如果要从代码隐藏中访问某些资源,请使用资源键:

var viewModel = (TaskViewModel)Resources["taskViewModelKey"];