Jim*_*m C 3 wpf datacontext mvvm
我正在学习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; }
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app.xaml中:
<Application.Resources>
<viewModels:ViewModelLocator x:Key="Locator" />
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
当我在主窗口中设置数据上下文时使用:
DataContext="Binding Main, Source={StaticResource Locator}"
Run Code Online (Sandbox Code Playgroud)
它编译但是我绑定到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}">
Run Code Online (Sandbox Code Playgroud)
但编译器不喜欢最后一行("字符','在这个位置意外",引用第一个逗号).注意我没有使用ExpressionBlend,但我认为我在课程中听说这行也将启用VisualStudio设计器:
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Run Code Online (Sandbox Code Playgroud)
如何在仍然允许Visual Studio在设计时识别绑定属性的同时使用ViewModelLocator?
如果你删除以下后的逗号,最后一行将很好地工作d:DesignInstance:
d:DataContext="{d:DesignInstance Type=viewModels:MainViewModel,
IsDesignTimeCreatable=True}">
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8965 次 |
| 最近记录: |