2012-11-11 192 views
1

设置的DataContext我尝试使用下面的XAML代码来设置视图模型作为视图的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代码。

回答

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> 

我不知道为什么你要不要定义视图模型的静态资源。就个人而言,我宁愿在DataContext的setter中实例化。

+0

问题是,如果你将一个属性绑定到某些不会继承datacontext(即DataGridColumn的Visibility属性)的东西,那么它使得它更容易与source = {StaticResource VM}进行绑定。 – William

+0

对于d:DataContext,请使用:d:UserControl.DataContext –