2016-04-01 35 views
0

我有我想在我的用户控件的资源字典定义,并将其设置为像这样的数据上下文视图模型:为什么我不能设置一个静态资源的X:名称在XAML

<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> 

但该领域的“x:名称=‘taskViewModelName’”显示了一个错误:

Could not register duplicate name 'taskViewModelName' in this scope

我想设置x:在DataContext的名称,这样我仍然可以从代码中访问它的后面。

关于如何修复此错误的任何建议?

+0

“重名‘taskViewModelName’”。当然你没有在其他地方使用这个名字? – Clemens

+0

@Clemens绝对正面! – Timmoth

+2

除此之外,您可以轻松访问DataContext属性后面的代码中的TaskViewModel实例,如'(TaskViewModel)DataContext',因此不需要在UserControl的资源中包含它。 – Clemens

回答

3

I am trying to set the x:Name of the datacontext so that i can still access it from the code behind

首先,有没有必要把资源视图模型,如果唯一的目标就是待会儿初始化数据上下文。直接初始化数据上下文:

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

并在代码隐藏中使用(TaskViewModel)DataContext。 第二,如果你要访问的代码背后的一些资源,利用资源的关键:

var viewModel = (TaskViewModel)Resources["taskViewModelKey"]; 
相关问题