【发布时间】:2011-12-24 14:00:33
【问题描述】:
使用 MVVM Light,我有两个 WPF 应用程序引用了一个公共视图库。我还有一个 ViewModels 库。 ViewModels 库有一个 ViewModelLocator。
依赖关系非常简单: WPF 应用程序 -> 视图 -> 视图模型
Views 库有一个 ResourceDictionary 并定义了一个 ViewModelLocator 资源,用于在运行时和设计时进行数据绑定:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ViewModels;assembly=ViewModels">
<vm:ViewModelLocator x:Key="Locator"/>
</ResourceDictionary>
问题是,当我在视图的顶级元素中设置 DataContext 时,出现异常:
<UserControl x:Class="Views.WelcomeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
DataContext="{Binding WelcomeViewModel, Source={DynamicResource Locator}}">
<Grid>
<TextBlock Text="{Binding Text}"/>
</Grid>
</UserControl>
例外: 不能在“Binding”类型的“Source”属性上设置“DynamicResourceExtension”。只能在 DependencyObject 的 DependencyProperty 上设置“DynamicResourceExtension”
我做错了什么?将视图中的定位器定义为资源甚至是最好的方法吗?
【问题讨论】:
标签: wpf xaml data-binding mvvm mvvm-light