3

我有一些在 F# 中创建的视图模型,并希望将它们用于 Blend 中的设计时数据,但我不知道如何让它工作。

我有一个简单的 xaml 文件,其中包含一些绑定设置,如下所示:

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:RacePacesUI"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="RacePacesUI.RacePaceEntryControl"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400"
    xmlns:SampleData="using:RacePacesUI.SampleData"
    d:DataContext="{d:DesignInstance Type=SampleData:EntrySampleVm, d:IsDesignTimeCreatable=True}">

其中 EntrySampleVm 定义如下:

  public class EntrySampleVm : ViewModels.EntryVm
  {
    public EntrySampleVm()
    {
      Distance = 26.2;
      Time = new TimeSpan(3, 30, 25);
      Pace = 4.0;
      Speed = 16.5;
    }
  }

ViewModels.EntryVm 是我的 F# ViewModel 类。

不幸的是,我在设计器中遇到了一个错误:

EntrySampleVm does not exist in this namespace

我在相同的命名空间中定义了一个类似的 C# 类,如下所示:

  public class Test 
  {
    public Test()
    {
      Distance = 26.2;
      Time = new TimeSpan(3, 30, 25);
      Pace = 4.0;
      Speed = 16.5;
    }

    public TimeSpan Time { get; set; }
    public double Distance { get; set; }
    public double Pace { get; set; }
    public double Speed { get; set; }
  }

如果我将 DataContext 设置如下:

d:DataContext="{d:DesignInstance Type=SampleData:Test, d:IsDesignTimeCreatable=True}">

然后一切都按预期工作,因此绝对是使用 F# ViewModel 的情况。

有没有办法让它工作?我不太喜欢 ServiceLocator 方法,因为我正在创建一个 Windows Phone 项目,所以我无法访问 x:Static 和 x:Type 扩展。

我正在使用混合版本:12.0.51020.0 更新 4 VS2013:12.0.31101.00 更新 4

谢谢你的帮助

4

0 回答 0