我正在学习WPF、MVVM Light和ViewModelLocator模式,但在我的主窗口的数据上下文方面遇到了困难。
public class ViewModelLocator
{
public ViewModelLocator()
{
var mainModel = new MainModel();
Main = new MainViewModel(mainModel);
}
public MainViewModel Main { get; private set; }
public static ViewModelLocator Instance
{
get { return Application.Current.Resources["Locator"] as ViewModelLocator; }
}
}
在我的app.xaml中:
<Application.Resources>
<viewModels:ViewModelLocator x:Key="Locator" />
</Application.Resources>
当我在主窗口中使用以下命令设置数据上下文:
DataContext="Binding Main, Source={StaticResource Locator}"
代码能够编译,但我在其他XAML文件中绑定到MainViewModel的所有属性都显示为红色,并且提示“无法解析该符号”。我认为可以通过指定仅适用于设计师的数据上下文来解决此问题:
<Window x:Class="WPFDemo.Windows.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converters="clr-namespace:WPFDemo.Converters"
xmlns:local="clr-namespace:WPFDemo"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="clr-namespace:WPFDemo.Models"
xmlns:viewModels="clr-namespace:WPFDemo.ViewModels"
Title="MainWindow" Height="350" Width="525"
DataContext="Binding Main, Source={StaticResource Locator}"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance, Type=viewModels:MainViewModel,
IsDesignTimeCreatable=True}">
但是编译器不喜欢最后一行(“在此位置意外出现字符 ','”,指的是第一个逗号)。请注意,我没有使用ExpressionBlend,但我记得在一门课程中听说过这行代码也能启用VisualStudio的设计功能:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
我该如何在启用Visual Studio设计时识别绑定属性的同时使用ViewModelLocator?
{ }
包装它 ---DataContext="{Binding Main, Source={StaticResource Locator}}"
- bdimag