设计时和运行时的 WPF 数据上下文

标签 wpf mvvm datacontext

我正在学习 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}"

它可以编译,但我绑定(bind)到 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,但我想我在类(class)中听说这条线也可以启用 VisualStudio 设计器:
 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

如何在使用 ViewModelLocator 的同时让 Visual Studio 在设计时识别绑定(bind)的属性?

最佳答案

如果您删除 d:DesignInstance 之后的逗号,最后一行将很好地工作:

d:DataContext="{d:DesignInstance Type=viewModels:MainViewModel,
IsDesignTimeCreatable=True}">

关于设计时和运行时的 WPF 数据上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24189815/

相关文章:

wpf - 保存为 XPS 文档的 FlowDocument 中缺少图像

wpf - 如何创建自定义 WPF 安装向导

WPF 等效于 Application.AddMessageFilter(Windows 窗体)

c# - 具有事件的复合 WPF GUI 界面

c# - 销毁 dataContext 与保持打开以供将来数据库访问的性能考虑?

.net - 绑定(bind)自动分离的情况

WPF MVVM - 存储库模式查询

wpf - 如何使用 MVVM 在 ListView 中设置特定项目?

c# - 在用户控件中定义命令绑定(bind)

sql - LINQ to SQL 多个 DataContext-s