我正在尝试使用以下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设置为来自Resources的StaticResource。但是,我无法弄清楚如何使用StaticResource设置DataContext。 我尝试了以下但是它给出了一个例外:
<UserControl .... DataContext="{StaticResource myViewModel}" >
请帮我弄清楚分配DataContext的XAML代码应该是什么。
答案 0 :(得分: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>
我想知道为什么要将ViewModel定义为静态资源。就个人而言,我更喜欢DataContext
。